首页 > 解决方案 > 每次新构建后 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>

标签: javaseleniumselenium-webdriverxpath

解决方案


谓词内具有数字数据类型的 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]

推荐阅读