Java 处理ID不断变化的元素

Java 处理ID不断变化的元素,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我正在运行脚本来自动化测试用例,发现id一直在变化。下面是我的HTML代码 Firebug用于试驾: <button class="G0036HC-b-a G0036HC-b-o G0036HC-b-g" id="gwt-uid-470" tabindex="0" aria-labelledby="gwt-uid-470" role="button" type="button"><div class="G0036HC-b-j">Click to continue</

我正在运行脚本来自动化测试用例,发现id一直在变化。下面是我的HTML代码 Firebug用于试驾:

<button class="G0036HC-b-a G0036HC-b-o G0036HC-b-g" id="gwt-uid-470" tabindex="0" aria-labelledby="gwt-uid-470" role="button" type="button"><div class="G0036HC-b-j">Click to continue</div></button>
单击以继续
检查员:

<button class="G0036HC-b-a G0036HC-b-o G0036HC-b-g" id="gwt-uid-320" tabindex="0" aria-labelledby="gwt-uid-320" role="button" type="button"><div class="G0036HC-b-j">Click to continue</div></button>
单击以继续
只有id的更改。
任何帮助都将不胜感激。

您可以通过
xpath
获取元素,并检查
id
属性是否以
gwtuid-
开头:


此外,@alecxe的答案建议我也建议您尝试使用基于文本的
xpath
搜索。我经常遇到等待的问题,因此也建议使用
explicit
wait this

// //div[.='Click to continue']/..
By byXpath = By.xpath("//div[.='Click to continue']");

WebElement myDynamicElement = (new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(byXpath));
//    myDynamicElement.click();

考虑到以下观察结果,下面的代码应该可以正常工作

  • 页面上的所有按钮都以gwt uid为前缀,并带有不断变化的数字后缀
  • 如果页面上的按钮具有唯一文本,则使用
By.xpath(“//button/div[text()=”单击以继续“]”)

  • 如果有多个按钮具有相同的文本,则使用索引。例如,使用两个文本相同的关闭按钮

By.xpath((//button/div[text()='Close'])[2]”对于第二次出现,请注意selenium不是零索引的。。。 //input[@id='']/following::input[1]


您可以使用previous以相同的方式识别子节点

Firebug:单击以继续Inspector:单击以继续存在一个公共url,我们可以在其中检查整个DOM。似乎在父元素或同级元素的帮助下,我们应该能够找到元素。尝试过,但不起作用,因为该页面中的所有按钮都以id“gwt uid-”@SukeshBolar开头。好的,但从问题来看,不清楚您需要哪个按钮以及它与其他按钮的区别。上面两个HTML代码是由两个单独的按钮组成的。他们的id=“gwt-uid-320”是动态的。只有最后3位数字会动态变化。你能帮我解决这个问题吗?@SukeshBolar好的,我很乐意帮忙,但需要一张清晰的图片。您需要同时单击两个按钮吗?请告诉我们哪一个!我把我的绰号弄得太复杂了,以至于无法正确地重复:DO.o@alecxe这真是太好了funny@saifur仍然未检测到元素:(@SukeshBolar有什么异常?@SukeshBolar在这种情况下,您能否提供更多
html
// //div[.='Click to continue']/..
By byXpath = By.xpath("//div[.='Click to continue']");

WebElement myDynamicElement = (new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(byXpath));
//    myDynamicElement.click();