java - 如何处理 Selenium 中动态变化的 ID

标签 java html selenium xpath selenium-webdriver

我有一个下拉菜单,单击它后会更改其 id

enter image description here

这是点击之前的 HTML 代码(此代码在页面中显示为灰色 {hidden})。

 <a class="headet_fonts" href="http://192.168.1.6/eprint_prod_3.8/ProductCatalogue/PriceCatalogue.aspx" onmouseout="javascript:displaynone('#FFFFFF');" onmouseover="javascript:onhovermenu('ProductCatalogue/PriceCatalogue.aspx','Products','Products',tabcolor,headerforecolor)">
  <b>
    <span id="**ctl00_header1_upperRepeater_ctl10_ModuleName**" class="headet_fonts header_colorbalck" style="color:black;">
      Products
    </span>
    <input id="ctl00_header1_upperRepeater_ctl10_hdn_Forecolor" type="hidden" value="#FFFFFF" name="ctl00$header1$upperRepeater$ctl10$hdn_Forecolor">
  </b>
</a>

点击后的HTML代码(此代码未隐藏):

<a class="headet_fonts" href="http://192.168.1.6/eprint_prod_3.8/ProductCatalogue/PriceCatalogue.aspx" onmouseout="javascript:displaynone('#FFFFFF');" onmouseover="javascript:onhovermenu('ProductCatalogue/PriceCatalogue.aspx','Products','navbar',tabcolor,'#FFFFFF')">
  <b>
    <span id="ctl00_header1_upperRepeater_ctl10_ActiveModuleName" class="ActiveModulenavigatorpanel" style="color:#FFFFFF;">
      Products
    </span>
  </b>
</a>

在 Selenium 代码中我使用了 xpath:

//div[@id='Products']/a/b/span

找到它,但它显示NoSuchElementException。我无法使用 ID,因为它正在更改

最佳答案

只需使用不同的 xpath,您并不局限于所显示的路径。

您可以使用xpath的contains()函数,例如:

//span[contains(@id, 'ctl00_header1_upperRepeater_ctl10')]

或者尝试通过 a 标签选择 span:

//a[@class=='headset_fonts']//span
//a[contains(@href, 'ProductCatalogue/PriceCatalogue.aspx')]//span

要开发这些 xpath,请使用立即显示结果的工具(例如 Firefox 的 XPath Checker 插件)。这样你应该很快就能得到一个有效的 xpath。

关于java - 如何处理 Selenium 中动态变化的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22447104/

相关文章:

java - Java框架选择问题

java - Selenium - 如何在 Java 中正确选择元素?

html - 是否可以使用相同的底层 HTML 结构通过 CSS 创建这三种不同的布局?

python - 使用 selenium 更改表中的值

java - 如何使用selenium web driver java点击一个包含某些单词作为文本的href

java - 在 Java 中解析 csv 文件时遇到问题

java - 关闭 ServerSocket 时会发生什么

java - 如何在 Spring 3 中将参数从 View 传递到 Controller

javascript - 选项卡上的 Bootstrap 3 数据目标属性不起作用

html - CSS定位。抬高 header