java - 每次新构建后 Xpaths div 都会发生变化
问题描述
我目前正在使用 selenium java 自动匹配 Web 应用程序。对于使用相对 xpaths 定位元素 Iam。每当我获得新版本时,我都会经常遇到问题,我的 xpath div 值正在发生变化。前任:
构建 1:
//*[@id='container']/div/div/div/div/div[5]/div/ul/li[1]/div/ul/li[13]/button
构建 2:
//*[@id='container']/div/div/div/div/div[6]/div/ul/li[1]/div/ul/li[13]/button
我们怎样才能让这个 xpath 为每个构建工作?甚至我们也将这个 xpath 用于“for 循环”。
for (int i = 1; i <= 4; i++) {
com.click("xpath","/html[1]/body[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[4]/div[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[2]/ul[1]/li[1]/div[2]/div[1]/ul[1]/li["+ i + "]/div[1]/span[2]/div[1]");
}
有什么解决方案可以克服这个问题吗?
HTML 代码:
<div id="container" xpath="1"><div><div class="ice-theme-provider light-theme css-aw120u e9snama0" data-automation-active-theme-name="light"><div tabindex="-1"><div class="css-1enaoom" data-automation-id="console" data-console-id="0" role="presentation"><div data-automation-id="application-menu-bar" class="css-1f2kwet"><ul class="css-qq4041" data-automation-id="system-menu"><li class="css-1tx6twl"><button type="button" class="ice-button css-5nd6tx e66scw10">File</button></li><li class="css-1tx6twl"><button type="button" class="ice-button css-5nd6tx e66scw10">Preferences</button></li><li class="css-1tx6twl"><button type="button" class="ice-button css-5nd6tx e66scw10">Connect Utils</button></li><li class="css-1tx6twl"><button type="button" class="ice-button css-5nd6tx e66scw10">Help</button></li></ul><span class="css-132uuf9"></span><button title="Tab Sorting: Manual (unsorted)" type="button" class="ice-button css-151om0c e66scw10">MANUAL</button><button title="click to unlock the layout"
<button aria-disabled="false" role="menuitem" tabindex="-1" type="button" class="ice-button e12espz23 css-1gkebzc e66scw10" style="" xpath="1"><span>Mark Field<span width="square" class="ice-icon ice-icon-caret-right css-19ah4i1 e5j0fb80"><svg viewBox="576 0 576 1792"><path d="M1152 896q0 26-19 45l-448 448q-19 19-45 19t-45-19-19-45v-896q0-26 19-45t45-19 45 19l448 448q19 19 19 45z"></path></svg></span></span></button>
解决方案
谓词内具有数字数据类型的 XPath 表达式只是用于与position()
函数进行比较的缩写形式。
您也可以使用这个仅限 XPath 的表达式:
/html[1]/body[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[4]/div[1]/div[1]/div[1]/div[2]
/div[1]/div[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[2]/ul[1]/li[1]/div[2]/div[1]/ul[1]
/li[position() <= 4]/div[1]/span[2]/div[1]
推荐阅读
- java - Response.header 是否覆盖 @Produces 注释?
- java - Jenkins - 在不同的机器上使用本地环境变量执行脚本
- ios - 如何访问不同目标的类实例?
- c - 如何更改结构数组中的变量而不更改其他变量
- javascript - DataTables 智能搜索 - 未按预期运行
- facebook-graph-api - 应用程序不再从 Graph API 获取数据 & 填写审核时出现问题
- xslt - 如何将命名空间和 xsi 添加到没有命名空间的传入 XML
- r - geom_smooth 线条颜色与展开颜色不同
- android - 制作适合 Android 4.2.2 版本的 PhoneGap/Cordova 项目
- jquery - 当引导轮播选择器选择了类时启动函数