当属性包含多个单词时,我有一个按属性选择节点的问题。例如:
<div class="atag btag" />
这是我的xpath表达式:
/ / * [@class =’atag’]
这个表达式适用于
<div class=“atag” />
但对于前面的例子不是这样。我如何选择<div>?
当属性包含多个单词时,我有一个按属性选择节点的问题。例如:
<div class="atag btag" />
这是我的xpath表达式:
/ / * [@class =’atag’]
这个表达式适用于
<div class=“atag” />
但对于前面的例子不是这样。我如何选择<div>?
当前回答
你可以试试下面的方法
By.CssSelector(“div.atag.btag”)
其他回答
请注意,如果您可以假设您感兴趣的类名不是另一个可能的类名的子字符串,bobince的答案可能会过于复杂。如果这是真的,您可以通过contains函数简单地使用子字符串匹配。下面将匹配任何类包含子字符串'atag'的元素:
//*[contains(@class,'atag')]
如果上面的假设不成立,子字符串匹配将匹配您不打算匹配的元素。在这种情况下,你必须找到单词边界。通过使用空格分隔符找到类名边界,bobince的第二个答案找到了精确的匹配:
//*[contains(concat(' ', normalize-space(@class), ' '), ' atag ')]
这将匹配atag而不是matag。
对于包含公共url的链接,必须在变量中控制台。然后按顺序尝试。
webelements allLinks=driver.findelements(By.xpath("//a[contains(@href,'http://122.11.38.214/dl/appdl/application/apk')]"));
int linkCount=allLinks.length();
for(int i=0; <linkCount;i++)
{
driver.findelement(allLinks[i]).click();
}
你可以试试下面的方法
By.CssSelector(“div.atag.btag”)
我来这里寻找Ranorex Studio 9.0.1的解决方案。这里还没有contains()。相反,我们可以像这样使用regex:
div[@class~'atag']
编辑:参见bobince的解决方案,它使用contains而不是start-with,以及一个技巧,以确保比较是在一个完整的标记级别上完成的(以免'atag'模式被发现是另一个'标签'的一部分)。
"atag btag"是class属性的奇数值,但无论如何,尝试:
//*[starts-with(@class,"atag")]