Java 我无法使用SeleniumWebDriver逐个访问WebElements列表
我想在amazon上搜索一个主题,然后在给定的书籍列表上逐个执行特定操作。我已经做了以下工作:Java 我无法使用SeleniumWebDriver逐个访问WebElements列表,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我想在amazon上搜索一个主题,然后在给定的书籍列表上逐个执行特定操作。我已经做了以下工作: WebDriver driver= new ChromeDriver(); driver.manage().window().maximize(); driver.get("https://www.amazon.com"); driver.findElement(By.id("twotabsearchtextbox")).sendKeys("Op
WebDriver driver= new ChromeDriver();
driver.manage().window().maximize();
driver.get("https://www.amazon.com");
driver.findElement(By.id("twotabsearchtextbox")).sendKeys("Operating System Books");
driver.findElement(By.className("nav-input")).click();
links = driver.findElements(By.className("s-access-detail-page")); //try to cache this
for(WebElement link : links) {
//System.out.println(String.format(link.getAttribute("href"))); //prints
link.click();
//extract reviews and one by one forward to semantic analysis
driver.navigate().back();
}
}
然而,这一个转到第一个链接,然后回到列表的页面。然后程序终止,出现以下错误:
线程“main”org.openqa.selenium.StaleElementReferenceException:stale元素引用:元素未附加到页面文档
StaleElementReferenceException
当webElement
不再附加到DOM时,这通常发生在您离开网页,然后在导航回原始网页后,尝试使用先前存储或捕获的WebElements
时
为了避免此异常,您需要再次识别以前捕获的元素,在您的情况下,您的代码应该如下所示:
List <WebElement>links = driver.findElements(By.className("s-access-detail-page")); //try to cache this
for(int i=0; i< links.size(); i++) {
List <WebElement> refLinks = driver.findElements(By.className("s-access-detail-page"));
refLinks.get(i).click();
driver.navigate().back();
}
List links=driver.findElements(By.className(“s-access-detail-page”)//尝试缓存此文件
对于(int i=0;i
错误,因为:您引用的元素不再存在于活动页面中。请尝试以下代码:
public static void main(String[] args) {
WebDriver driver= new ChromeDriver();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.manage().window().maximize();
driver.get("https://www.amazon.com");
driver.findElement(By.id("twotabsearchtextbox")).sendKeys(
"Operating System Books");
driver.findElement(By.className("nav-input")).click();
List<WebElement> links = driver.findElements(By
.className("s-access-detail-page"));
for (int i = 0; i < links.size(); i++) {
List<WebElement> allLink = driver.findElements(By
.className("s-access-detail-page"));
allLink.get(i).click();
driver.navigate().back();
}
}
publicstaticvoidmain(字符串[]args){
WebDriver驱动程序=新的ChromeDriver();
driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
driver.manage().window().maximize();
驱动程序。获取(“https://www.amazon.com");
driver.findElement(By.id(“twotabsearchtextbox”)).sendKeys(
“操作系统手册”);
driver.findElement(按.className(“导航输入”))。单击();
列表链接=驱动程序.findElements(按
.className(“s-access-detail-page”);
对于(int i=0;i
出现此异常是完全正常的:StaleElement
表示您尝试引用的元素不再位于活动浏览器窗口中。考虑到您已经导航到另一个页面,然后又导航回来,上一个页面中的任何元素都不应再处于活动状态。您要么重新进行搜索,要么在新窗口中打开链接,这样您的原始窗口在另一个浏览器选项卡中仍保持不变。