xpath不等于、不包含的写法

在自动化测试中,XPath是常用的元素定位方式。本文介绍了在遇到XPath选择器定位到多个元素,尤其是需要排除特定属性时的解决方法。分析了当XPath定位到隐藏元素导致的交互错误,并提供了三种解决方案:使用不等于符号`!=`,使用`not()`函数,以及使用`not(contains())`表达式,以成功定位到正确的目标元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介:写自动化用例时经常会用到xpath来定位元素,这里总结一下xpath语法中不等于、不包含的写法

问题

如下图:该页面有两个页签,我们需要在第二个页签进行操作:在输入框输入后点击确定按钮。
在这里插入图片描述

第一次写的xpath是这样的

//button[./span[text()='确定']]

运行时报错 element not interactable,出现这种错误通常因为是这个xpath定位到的元素不在当前页面,所以报不可点击错误。报错信息如下:

org.openqa.selenium.ElementNotVisibleException: element not interactable

分析

用XpathHelper在页面测试了一下,发现该xpath定位到了两个确定按钮,如下图:

### 使用Selenium通过XPath定位元素的最新方法 在现代Web开发环境中,随着技术的发展和浏览器兼容性的改进,Selenium WebDriver API也进行了更新。为了适应这些变化,在Java中使用Selenium进行XPath定位时推荐采用最新的实践。 #### 更新后的API调用方式 对于较新的版本(如Selenium 4及以上),`find_element_by_*` 和 `find_elements_by_*` 已被弃用并移除。取而代之的是统一的方法: - 单个元素查找应使用 `driver.findElement()` 方法。 - 多个元素查找则应该使用 `driver.findElements()` 方法。 这两种方法都接受一个参数——`By` 类型的对象,该对象可以通过静态工厂方法创建,比如 `By.xpath(String xpathExpression)` 来指定XPath表达式[^1]。 ```java // 查找单个元素的例子 WebElement element = driver.findElement(By.xpath("//span[text()='设置']")); // 如果要查找多个符合条件的元素,则可以这样做: List<WebElement> elements = driver.findElements(By.xpath("//input[contains(@placeholder,'搜索')]")); ``` #### 部分信息匹配 当需要基于部分文本或其他完全确定的信息来定位元素时,可以利用XPath中的函数如`contains()` 或者正则表达式的功能。这使得即使页面结构发生变化或者某些属性值是固定的字符串也能成功找到目标节点[^3]。 ```java // 匹配包含特定子串的元素 WebElement partialMatchElement = driver.findElement(By.xpath("//div[contains(text(),'欢迎来到')]")); // 对于输入框等标签内的占位符文字也可以这样处理 WebElement inputField = driver.findElement(By.xpath("//input[contains(@placeholder, '请输入关键字')]")); ``` #### 谷歌浏览器下的XPath调试技巧 为了提高效率,在编写复杂的XPath之前可以在Chrome开发者工具中先测试一下路径是否有效。打开控制台后可以直接运行 `$x('your-xpath-here')` 命令查看返回的结果列表,从而快速验证所写的XPath语法是否有误以及能否准确定位到预期的目标元素[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值