我的问题很简单 - 使用Selenium,当每个超链接在新页面或新窗口中打开或在同一网页中打开时,如何继续单击链接。
例如,我在网页上有以下链接: 登录 注册 忘记密码? 注册我们 点击此链接 家 条款 隐私政策
以下是我编写的一小段代码,用于点击网页上提到的链接:
List<WebElement> elements = driver.findElements(By.tagName("a"));
//clicking all links
for (WebElement el : elements){
System.out.println("Link getting clicked" + el.getText());
el.click();
driver.navigate().back();
}
正如您所看到的,我正在尝试获取链接并尝试逐个单击它们。但是,第一次单击后我收到错误。控制台说:“org.openqa.selenium.StaleElementReferenceException:元素不再附加到DOM”。
我很确定我知道原因,因为链接在同一个网页上被打开,但我正在进行后退导航,这根本没有帮助我。
有任何想法/建议吗?
答案 0 :(得分:0)
这可能是由于程序执行推进到“driver.navigate()。back();”的调用。在页面加载之前。
尝试引入一个implicit wait,它告诉“WebDriver在尝试查找一个或多个元素时,如果它们不能立即可用,则会在一定时间内轮询DOM”
e.g。创建Web驱动程序时,请尝试:
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
答案 1 :(得分:0)
在重新加载页面之前,您必须重新引用该元素,然后才能与它进行交互,对于您的代码,请尝试将其修改为:
driver.manage().timeouts().implicitlyWait(3000, TimeUnit.MILLISECONDS);
List<WebElement> elements = driver.findElements(By.tagName("a"));
//clicking all links
for (int i=0; i<elements.size(); i++){
WebElement el = driver.findElements(By.tagName("a")).get(i);
System.out.println("Link getting clicked" + el.getText());
el.click();
driver.navigate().back();
}