我有一个下拉菜单,单击它后会更改其 id
这是点击之前的 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/