当属性包含多个单词时,我有一个按属性选择节点的问题。例如:
<div class="atag btag" />
这是我的xpath表达式:
/ / * [@class =’atag’]
这个表达式适用于
<div class=“atag” />
但对于前面的例子不是这样。我如何选择<div>?
当属性包含多个单词时,我有一个按属性选择节点的问题。例如:
<div class="atag btag" />
这是我的xpath表达式:
/ / * [@class =’atag’]
这个表达式适用于
<div class=“atag” />
但对于前面的例子不是这样。我如何选择<div>?
当前回答
对于包含公共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();
}
其他回答
工作的2.0 XPath:
//*[tokenize(@class,'\s+')='atag']
或者用一个变量:
//*[tokenize(@class,'\s+')=$classname]
再加上bobince的回答…… 如果您使用的工具/库使用Xpath 2.0,也可以这样做:
//*[count(index-of(tokenize(@class, '\s+' ), $classname)) = 1]
Count()显然是必需的,因为index-of()返回字符串中与之匹配的每个索引的序列。
Mjv的答案是一个很好的开始,但如果atag不是列出的第一个类名,则会失败。
通常的方法相当笨拙:
//*[contains(concat(' ', @class, ' '), ' atag ')]
只要类之间仅用空格分隔,而不是其他形式的空格,这种方法就有效。情况几乎总是如此。如果它可能不是,你必须让它变得更笨拙:
//*[contains(concat(' ', normalize-space(@class), ' '), ' atag ')]
(通过类名一样的空格分隔字符串进行选择是非常常见的情况,令人惊讶的是它没有特定的XPath函数,比如CSS3的'[class~="atag"]'。)
试试这个://*[contains(@class, 'atag')]
我来这里寻找Ranorex Studio 9.0.1的解决方案。这里还没有contains()。相反,我们可以像这样使用regex:
div[@class~'atag']