我正在努力让Selenium经历大量替代条件XPath,寻找 可能匹配的 元素,并将其传递给对象elmnt
。
当前,使用OR
运算符(|
),代码很快变得非常重复和详尽,特别是当存在很多可能的变化时。
在下面的例子中,唯一的变化是,我开始寻找h1
,h2
或h3
。其余部分相同。
for word in ["testString1", "testString2", "testString3"]:
try:
elmnt = driver.find_element_by_xpath(
(
"//h1[text()[contains(., '%s')]]" % word +
"/following::p" +
"|" +
"//h1[text()[contains(., '%s')]]" % word +
"/following::span" +
"|" +
"//h2[text()[contains(., '%s')]]" % word +
"/following::p" +
"|" +
"//h2[text()[contains(., '%s')]]" % word +
"/following::span" +
"|" +
"//h3[text()[contains(., '%s')]]" % word +
"/following::p" +
"|" +
"//h3[text()[contains(., '%s')]]" % word +
"/following::span"
)
).text
except:
pass
else:
print elmnt
break
但在我实际的代码,我将寻求更加变化,包括在不同的节点类型/following::
,除了p
和span
。
问题: 有什么方法可以简化(缩短)该过程吗?
我的第一个希望是,可以做类似的事情:
"//[h1|h2|h3][text()[contains(., '%s')]]" % word
即可以将or
运算符“嵌入” XPath表达式中,而不必像示例中那样使用完全详尽的字符串连接。如果是这样的话,该想法可能已经被广泛应用。
但是,这似乎是不可能的。
是创建某种生成函数来创建整个xPath字符串的解决方案,还是其他解决方案?
我将使用缩短的XPath(利用@alecxe在注释中self::
建议的轴):
"//*[self::h1 or self::h2 or self::h3][contains(., '%s')]" % word
+ "/following::*[self::p or self::span]"
请注意,这个测试的 字符串值_的h1
,或者h2
,或者h3
包含的值word
变量(而不是直接文本节点的字符串值)。另外,如果你想真正的测试,这些元素的字符串值 _是 不是_包含_ word
,使用[.='%s']
来代替。
例如与CSS选择器一起使用,但如何使用XPath表达式呢?
有没有一种方法可以让这段代码更短或更蟒蛇的方式,而不是写很多ands或ors?
问题内容: 考虑我有以下示例XML文件: 将其扁平化为一组xpath表达式的最佳(最有效)方法是什么。另请注意:我想忽略任何名称空间和属性信息。(如果需要,也可以将其作为预处理步骤来完成)。 所以我想作为输出: 我正在用Java实现。 编辑: PS,在文本节点上没有数据的情况下,我也可能需要此方法,因此,例如,以下代码应生成与上述相同的输出: 问题答案: 您可以使用XSLT轻松完成此操作。查看示例
问题内容: 我正在使用这样的构造: 但是我需要选择所有以“某些文本”开头的文本的链接,所以我想知道这里是否可以使用regexp?在lxml文档中找不到任何内容 问题答案: 您可以执行此操作(尽管该示例不需要正则表达式)。Lxml支持来自EXSLT扩展功能的正则表达式。(请参阅XPath类的lxml文档,但该方法也适用于该方法) 请注意,您需要提供名称空间映射,以便它知道xpath表达式中的“ re
问题内容: Swift的这个成语很有道理 但是,我 真正 想要的是 如所写,这不是不正确的,但是这个想法可行吗? 问题答案: Swift 1.2更新 从Swift 1.2开始,允许展开多个可选选项,因此您现在可以编写此代码,如示例所示: 您甚至可以交错条件,例如: 以前在Swift 1.2之前有效 这是在没有难看的强制包扎的情况下的方法: 实际上,它仍然很冗长。 之所以可行,是因为表单的可选类型实
主要内容:示例XPath表达式通常定义模式以便选择一组节点。 这些模式由XSLT用于执行转换,或者由用于寻址。 XPath规范指定了七种类型的节点,这些节点可以是XPath表达式的执行输出。 根 元素 文本 属性 注释 处理指令 命名空间 XPath使用路径表达式从XML文档中选择节点或节点列表。 以下是从XML文档中选择节点/节点列表的路径和表达式列表。 序号 表达式 描述 1 选择具有给定名称的所有节点。