如何匹配包含特定字符串的属性?

博客讨论了在XPath中如何正确选择包含特定单词的属性,特别是在属性包含多个单词时遇到的问题。提供了一系列XPath表达式的示例和解决方案,强调了边界匹配和避免子字符串误匹配的重要性。
摘要由CSDN通过智能技术生成

当属性包含多个单词时,按属性选择节点时遇到问题。 例如:

<div class="atag btag" />

这是我的xpath表达式:

//*[@class='atag']

该表达式适用于

<div class="atag" />

但不适用于前面的示例。 如何选择<div>


#1楼

添加到bobince的答案...如果您使用的任何工具/库都使用Xpath 2.0,则也可以执行以下操作:

//*[count(index-of(tokenize(@class, '\s+' ), $classname)) = 1]

显然需要count(),因为index-of()返回字符串中与之匹配的每个索引的序列。


#2楼

一个有效的2.0 XPath:

//*[tokenize(@class,'\s+')='atag']

或带有变量:

//*[tokenize(@class,'\s+')=$classname]

#3楼

编辑 :请参阅bobince的解决方案,该解决方案使用contains而不是start-with ,以及一个技巧,以确保在完整令牌的级别上进行比较(不要将“ atag”模式作为另一个“ tag”的一部分找到)。

“ atag btag”是class属性的一个奇数值,但更是如此,请尝试:

//*[starts-with(@class,"atag")]

#4楼

mjv的答案是一个好的开始,但是如果atag不是列出的第一个类名,它将失败。

通常的方法比较笨拙:

//*[contains(concat(' ', @class, ' '), ' atag ')]

只要类仅由空格(而不是其他形式的空格)分隔,此方法就起作用。 几乎总是这样。 如果不是这样,则必须使它更加笨拙:

//*[contains(concat(' ', normalize-space(@class), ' '), ' atag ')]

(通过类名分隔的字符串进行选择是一种常见的情况,令人惊讶的是,没有像CSS3的'[class〜=“ atag”]'这样的特定XPath函数。)


#5楼

试试这个: //*[contains(@class, 'atag')]


#6楼

您可以尝试以下

By.CssSelector("div.atag.btag")


#7楼

请注意,如果您可以假设感兴趣的类名不是另一个可能的类名的子字符串 ,bobince的答案可能会过于复杂。 如果是这样,则可以通过contains函数简单地使用子字符串匹配。 以下内容将匹配其类包含子字符串'atag'的任何元素:

//*[contains(@class,'atag')]

如果上述假设不成立,则子字符串匹配将匹配您不想要的元素。 在这种情况下,您必须找到边界字。 通过使用空格定界符来查找类名称边界,bobince的第二个答案将找到确切的匹配项:

//*[contains(concat(' ', normalize-space(@class), ' '), ' atag ')]

这将匹配atag而不是matag


#8楼

对于包含公共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();
}

#9楼

这将选择它们全部,而与属性的位置无关

//div[contains(@class, 'atag') and contains(@class ,'btag')]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值