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

<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')]

如何匹配包含特定字符串的属性?相关推荐

  1. 正则表达式匹配不包含特定字符串解决匹配溢出问题

    匹配溢出问题在正则表达式当中算是比较常见的问题,它常常导致我们匹配结果莫名其妙的出错,本文专门为你讲解如何通过匹配不包含特定字符串的方法来解决这类问题. 那么,什么是匹配溢出呢? 下面我们来看个例子: ...

  2. php 正则表达式不包含,不包含特定字符串的php正则表达式

    常用函数strstr($ str," abc"); 常规匹配preg_match(" /(abc)?/ is",$ str); 但是,如果要匹配没有特定字符串的 ...

  3. vim多行注释, 多行删除, 删除所有内容, 删除包含特定字符串的行

    1.多行注释: 首先按esc进入命令行模式下,按下Ctrl + v,进入列(也叫区块)模式; 在行首使用上下键选择需要注释的多行; 按下键盘(大写)"I"键,进入插入模式: 然后输 ...

  4. pandas筛选dataframe列名称中包含特定字符串的数据列(select columns contains specifiec substring in dataframe)

    pandas筛选dataframe列名称中包含特定字符串的数据列(select columns contains specifiec substring in dataframe) 目录 pandas ...

  5. pandas删除dataframe列名称中包含特定字符串的数据列(dropping columns contains specifiec substring in dataframe)

    pandas删除dataframe列名称中包含特定字符串的数据列(dropping columns contains specifiec substring in dataframe) 目录 pand ...

  6. 如何在JavaScript / jQuery中查找数组是否包含特定字符串? [重复]

    本文翻译自:How to find if an array contains a specific string in JavaScript/jQuery? [duplicate] This ques ...

  7. pandas删除包含特定字符串所在的行

    文章目录 构建df df结构 删除包含特定字符串所在的行 效果 代码汇总 构建df import pandas as pddf = pd.DataFrame({'水果': ['苹果', '香蕉', ' ...

  8. 正则匹配---匹配包含指定字符串

    /**小编最近做的项目里面用到了需要匹配包含指定字符串的字符串,我用到了正则匹配.下面是具体代码: *///正则判断相关人士类型是否包括027,网银使用者 String reg = "((? ...

  9. python正则匹配txt特定字符串(有换行)

    python正则匹配txt特定字符串(有换行) 在原txt文件中,我们需要匹配出的字符串为:休闲服务(中间参杂着换行) 直接复制到notebook里进行处理 完整代码 在原txt文件中,我们需要匹配出 ...

最新文章

  1. 介绍什么是极限编程?
  2. Python Django 自定义Manager实现批量删除(逻辑删除)
  3. linux mysql编译安装mysql_【MySQL安装】Linux下安装MySQL(预编译)
  4. 4.odoo13的学习(odoo中的xml)
  5. python__和_区别_【Python】对_和__差别的理解
  6. 三、如何手动实现一个微前端框架雏形
  7. 选择排序----详细算法分析
  8. Java 编译,运行错误之 java.lang.UnsupportedClassVersionError: Bad version n umber in .class file
  9. Bailian4141 砝码称重【DP】
  10. GitLab容器注册服务已集成于Docker容器
  11. 女人不需要哲学,因为哲学不能给她们带来面包
  12. System.Net.Http.Formatting的nuget版本冲突问题
  13. 老鱼Python数据分析——篇一:项目立项
  14. Beyond Compare 30天评估期结束解决办法
  15. 【内网渗透】搭建隧道
  16. VUE PC端和移动端适配
  17. hdfs高可用与高拓展机制分析
  18. 【干货】实例讲解:跨部门沟通和与领导沟通的心得与技巧
  19. python 3.7.0 小甲鱼 有道词典翻译 (error:50)问题解决
  20. JavaScript高级(二)|函数进阶+正则表达式

热门文章

  1. 垃圾回收器机制(二):快速解读GC算法之标记-清除,复制及标记整理-算法
  2. 算法---字符串去重
  3. 【剑指offer-Java版】19二叉树的镜像
  4. 自定义view-波纹扩散(圆扩散)
  5. cube sdio fatfs 初始化sd卡_SD卡读卡器检测——硬盘检测软件Hard Disk Sentinel Pro介绍
  6. Http和Https对比
  7. php tp框架手册,php框架手册
  8. uniapp - easycom模式(自动引入组件)
  9. Matplotlib中中文不显示问题
  10. 鸟哥的私房菜 第0章