硒元素参考



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

我正试图使用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());
}

显然,这并不是所有的代码,但为了简短起见,我想提供我正在尝试做的事情的概要。当我运行这篇文章时,我偶尔会从其中一个print语句中得到StaleElementReferenceException。这种行为是不确定的:有时它会出现,有时它不会出现,并且测试成功运行,当它出现时,它不会出现在同一点。例如,有时它会在搜索baz时显示,其他时候它会在查找bar时显示,有时它将显示在第一个打印语句中,有时会显示在第二个语句中。

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

编辑:注意,当我只运行一个搜索元素而没有for循环时,代码运行得非常好,例如search("foo")search("baz")将运行良好的

正如您所说,问题的产生是因为您的代码没有给浏览器加载网页所需的时间。必须在每个driver.get(myPage);之后写一个Thread.sleep(x);,以便浏览器加载网页。

如果这对你不起作用,试着按照以下问题的答案:如何避免";StaleElementReferenceException";硒?。

最新更新