gpt4 book ai didi

java - 存储在数组中的复合类在 selenium java 中无法访问

转载 作者:太空宇宙 更新时间:2023-11-04 13:47:19 24 4
gpt4 key购买 nike

我的问题是单击按钮后它显示了一些 6 个选项,我需要存储这些选项的复合类名称,因为我需要单击每个选项。但是当我尝试将类名称存储在数组中并开始迭代时,它成功单击了第一个选项,但是当尝试单击第二个选项时,它给出了异常“org.openqa.selenium.StaleElementReferenceException:元素不再附加到 DOM”。我哪里做错了。

这是迭代存储在数组中的类的代码:

List<WebElement> elementsList = new ArrayList<WebElement>(); 
elementsList = ArrayList<WebElement>)driver.findElements((By.cssSelector(".simpleButtonWidget")‌​));
Iterator itr = elementsList.listIterator();
while(itr.hasNext()) {
WebElement tempElement = (WebElement)itr.next();
tempElement =(WebElement)itr.next();
tempElement.click();
}

页面代码:

<div class="toolsMenuWidget"> 
<div id="toolsMenuJPlayer" class="jp-jplayer" style="width: 0px; height: 0px;"></div>
<div class="simpleButtonWidget ConnectingCubesBtn choice_1 up" style="cursor: pointer;" title="Connecting Cubes"></div>
<div class="simpleButtonWidget NumberCardsBtn choice_2 up" style="cursor: pointer;" title="Number Cards"></div>
<div class="simpleButtonWidget PlayMoneyBtn up choice_3" style="cursor: pointer;" title="Play Money"></div>
<div class="simpleButtonWidget PosterBtn up choice_4" style="cursor: pointer;" title="100 Poster"></div>
</div>

最佳答案

你的 while 循环的第二行肯定是错误的:

while(itr.hasNext()) { 
WebElement tempElement = (WebElement)itr.next();
tempElement =(WebElement)itr.next(); //remove this
tempElement.click();
}

但正如 Vikas Neha Ojha 指出的那样,如果在单击第一个元素后 DOM 发生更改,则可能会引发 StaleElelmentReferenceException。在这种情况下,您需要再次查找每个元素。鉴于元素的标题是稳定的,这应该可行:

String[] titles = { "Connecting Cubes", "Number Cards", "Play Money", "100 Poster" };
for (String title : titles) {
WebElement element = driver.findElement(By.xpath("//div[@title='" + title + "']"));
element.click();
}

关于java - 存储在数组中的复合类在 selenium java 中无法访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30702004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com