gpt4 book ai didi

java - Selenium 陈旧元素引用

转载 作者:行者123 更新时间:2023-12-01 17:58:17 25 4
gpt4 key购买 nike

(首先是免责声明,我仍在学习 Selenium,所以如果这里有任何可怕的不良做法,请告诉我)

我正在尝试使用 Selenium 将一些文本输入到字段中,等待结果页面加载,然后获取特定的 DOM 元素。我的输入文本位于数组中

@Test
public void test() throws Exception {
final String[] terms = new String[] {"foo", "baz", "bar"};
for (String term: terms) {
search(term);
}
}

private void search(String searchTerm) {
driver.get(myPage);
driver.findElement(By.xpath(xpath)).sendKeys(searchTerm);
// Press enter
System.out.println(driver.findElement(By.className("theThingIWant").getText());
System.out.println(driver.findElement(By.className("anotherThingIWant").getText());
}

显然,这不是全部代码,但为了保持帖子简短,我想提供我正在尝试做的事情的要点。当我运行这个时,我偶尔会得到 StaleElementReferenceException来自打印语句之一。这种行为是不确定的:有时它会出现,有时它不会出现并且测试运行成功,而当它出现时,它不会在同一点出现。例如,有时搜索 baz 时会出现,其他时候搜索 bar 时会显示,有时它会出现在第一个打印语句中,有时会出现在第二个打印语句中。

我预感 for 循环运行得太快,导致驱动程序返回 myPage并搜索下一个术语,因为我的代码仍在尝试访问 theThingIWantanotherThingIWant 。如果我错了,请告诉我,但我非常感谢尝试解决此问题的一些见解

编辑:注意,当我只运行一个搜索元素而不使用 for 循环时,代码工作得很好,例如。 search("foo")search("baz")会运行得很好

最佳答案

正如您所说,问题是由于您的代码没有让浏览器有时间加载网页而引起的。必须在每个 driver.get(myPage); 之后编写一个 Thread.sleep(x); 以让浏览器加载网页。

如果这对您不起作用,请尝试按照以下问题的答案进行操作:How to avoid "StaleElementReferenceException" in Selenium? .

关于java - Selenium 陈旧元素引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60678069/

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