Java 如何处理Selenum中动态变化的ID

Java 如何处理Selenum中动态变化的ID,java,html,selenium,xpath,selenium-webdriver,Java,Html,Selenium,Xpath,Selenium Webdriver,我有一个下拉菜单,点击后可以改变它的id 这是单击之前的HTML代码(此代码在页面中呈灰色{hidden}) 要定位它,但它显示的是NoTouchElementException。我不能使用ID,因为它正在改变只需使用不同的xpath,您不限于显示的xpath 您可以使用xpath的contains()函数,例如: //span[contains(@id, 'ctl00_header1_upperRepeater_ctl10')] 或者尝试通过a标签选择span: //a[@class=='

我有一个下拉菜单,点击后可以改变它的id

这是单击之前的HTML代码(此代码在页面中呈灰色{hidden})


要定位它,但它显示的是
NoTouchElementException
。我不能使用ID,因为它正在改变

只需使用不同的xpath,您不限于显示的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。

只需使用不同的xpath,您就不局限于您展示的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。

只需使用不同的xpath,您就不局限于您展示的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。

只需使用不同的xpath,您就不局限于您展示的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。

从html中我们可以得出结论,锚定标记将在
onmouseover
事件中可见。因此,您只需使用class
movetoelement()
方法将鼠标悬停在标题上,然后使用
findElement()

xpath = //div[@id='Products']//span[contains(.,'Products')]

由于它位于锚定标记内,因此您还可以使用
linkText

driver.findElement(By.linkText("Products")).click();

一个更简单的方法是使用
JavascripExecuter
,使用它您不必悬停以使元素可见,因为这也适用于隐藏元素,尽管我不建议这样做(原因是用户不会单击隐藏元素)。以下脚本仅供您参考:

((JavascriptExecutor)driver).executeScript("$('div#Products span').click();");

从html中我们可以得出结论,锚定标记将在
onmouseover
事件中可见。因此,您只需使用class
movetoelement()
方法将鼠标悬停在标题上,然后使用
findElement()

xpath = //div[@id='Products']//span[contains(.,'Products')]

由于它位于锚定标记内,因此您还可以使用
linkText

driver.findElement(By.linkText("Products")).click();

一个更简单的方法是使用
JavascripExecuter
,使用它您不必悬停以使元素可见,因为这也适用于隐藏元素,尽管我不建议这样做(原因是用户不会单击隐藏元素)。以下脚本仅供您参考:

((JavascriptExecutor)driver).executeScript("$('div#Products span').click();");

从html中我们可以得出结论,锚定标记将在
onmouseover
事件中可见。因此,您只需使用class
movetoelement()
方法将鼠标悬停在标题上,然后使用
findElement()

xpath = //div[@id='Products']//span[contains(.,'Products')]

由于它位于锚定标记内,因此您还可以使用
linkText

driver.findElement(By.linkText("Products")).click();

一个更简单的方法是使用
JavascripExecuter
,使用它您不必悬停以使元素可见,因为这也适用于隐藏元素,尽管我不建议这样做(原因是用户不会单击隐藏元素)。以下脚本仅供您参考:

((JavascriptExecutor)driver).executeScript("$('div#Products span').click();");

从html中我们可以得出结论,锚定标记将在
onmouseover
事件中可见。因此,您只需使用class
movetoelement()
方法将鼠标悬停在标题上,然后使用
findElement()

xpath = //div[@id='Products']//span[contains(.,'Products')]

由于它位于锚定标记内,因此您还可以使用
linkText

driver.findElement(By.linkText("Products")).click();

一个更简单的方法是使用
JavascripExecuter
,使用它您不必悬停以使元素可见,因为这也适用于隐藏元素,尽管我不建议这样做(原因是用户不会单击隐藏元素)。以下脚本仅供您参考:

((JavascriptExecutor)driver).executeScript("$('div#Products span').click();");

我只是提供了一种替代方法:使用CSS而不是xpath。CSS更干净、更简单、更快

span[id^='ctl00_header1_upperRepeater']

我不能容忍其他的答案。Xpath非常复杂,对于这种类型的东西来说是不必要的。

我只是提供了一种替代方法:使用CSS而不是Xpath。CSS更干净、更简单、更快

span[id^='ctl00_header1_upperRepeater']

我不能容忍其他的答案。Xpath非常复杂,对于这种类型的东西来说是不必要的。

我只是提供了一种替代方法:使用CSS而不是Xpath。CSS更干净、更简单、更快

span[id^='ctl00_header1_upperRepeater']

我不能容忍其他的答案。Xpath非常复杂,对于这种类型的东西来说是不必要的。

我只是提供了一种替代方法:使用CSS而不是Xpath。CSS更干净、更简单、更快

span[id^='ctl00_header1_upperRepeater']

我不能容忍其他的答案。Xpath对于这种类型的东西来说是复杂且不必要的。

我在运行selenium脚本org.openqa.selenium.NoSuchElementException时遇到此错误:无法找到元素:{“方法”:“id”,“选择器”:“//a[包含(@href,'productCatalog/priceCatalog.aspx')]//span}命令持续时间或超时:1.06秒,如我所说,不要在selenium上开发xpath。首先使用xpath、xpath检查器或任何您喜欢的工具获取一个工作的xpath,然后插入