Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我无法使用SeleniumWebDriver逐个访问WebElements列表_Java_Selenium_Selenium Webdriver - Fatal编程技术网

Java 我无法使用SeleniumWebDriver逐个访问WebElements列表

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

我想在amazon上搜索一个主题,然后在给定的书籍列表上逐个执行特定操作。我已经做了以下工作:

    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
表示您尝试引用的元素不再位于活动浏览器窗口中。考虑到您已经导航到另一个页面,然后又导航回来,上一个页面中的任何元素都不应再处于活动状态。您要么重新进行搜索,要么在新窗口中打开链接,这样您的原始窗口在另一个浏览器选项卡中仍保持不变。