我有一个下拉菜单,点击后会更改其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,因为它正在改变
答案 0 :(得分:1)
只需使用不同的xpath,您不仅限于您展示的那个。
您可以使用xpath&#39; contains()
函数,例如:
//span[contains(@id, 'ctl00_header1_upperRepeater_ctl10')]
或尝试通过span
标记选择a
:
//a[@class=='headset_fonts']//span
//a[contains(@href, 'ProductCatalogue/PriceCatalogue.aspx')]//span
要开发这些xpath,请使用能够立即显示结果的内容(例如Firefox的XPath Checker插件)。这样你应该快速到达一个工作的xpath。
答案 1 :(得分:1)
从html我们可以得出结论,锚标记将在onmouseover
事件中可见。因此,您只需使用Action
类movetoelement()
方法将鼠标悬停在标题上。然后将findElement()
与
xpath = //div[@id='Products']//span[contains(.,'Products')]
或
由于它位于锚标记内,因此您也可以使用linkText
:
driver.findElement(By.linkText("Products")).click();
另一个更简单的方法是使用JavascripExecuter
,使用此方法你不必悬停以使元素可见,因为这也适用于隐藏元素,虽然我不推荐这个(原因 - 用户不会点击隐藏的元素)。以下脚本仅供您参考:
((JavascriptExecutor)driver).executeScript("$('div#Products span').click();");
答案 2 :(得分:1)
我只提供此选项:使用 CSS 而不是 xpath。 CSS更干净,更简单,更快。
span[id^='ctl00_header1_upperRepeater']
我无法宽恕其他答案。 Xpath很复杂,对于这种能力来说是不必要的。