当前位置: 首页 > 知识库问答 >
问题:

无法使用Java和Selenium Webdriver单击网页上的所有链接

沃驰
2023-03-14
package testPackage;

import java.util.List;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.*;

public class AllLinkVerificationInAPage {
    WebDriver driver;
    @BeforeTest
    public void OpenApp()
    {
        System.setProperty("webdriver.chrome.driver", "E:/Selenium/Webdriver   /Softwares/chromedriver.exe");
        driver = new ChromeDriver();
        driver.navigate().to("http://ndtv.com/");
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        WebElement popUp = driver.findElement(By.xpath("//*[@id='__cricketsubscribe']/div[2]/div[2]/a[1]"));
        popUp.click();      
    }

    @Test
    public void clickLinks() throws InterruptedException
    {
        //extract the list of WenElements and its count
        List<WebElement> linkElements =  driver.findElements(By.tagName("a"));
        int count = linkElements.size();
        System.out.println("Total number of links = " + count );

        //test each link
        for(WebElement currentElement : linkElements)
        {
            String link = currentElement.getText();
            System.out.println(link);
            if(link !="")
            {
                currentElement.click();
                System.out.println("Working Fine");

            }

            driver.navigate().back();
            Thread.sleep(3000);
        }
    }
}  

当我运行此代码时,会出现以下错误:-

组织。openqa。硒。StaleElementReferenceException:stale元素引用:元素未附加到页面文档

我也尝试了含蓄的等待,但得到了同样的问题。

共有1个答案

林君博
2023-03-14

每次更改或刷新DOM时,比如转到不同的页面时,驱动程序都会丢失它以前找到的元素。每次迭代都需要重新定位列表

int count = driver.findElements(By.tagName("a")).size();
for (int i = 0 ; i < count ; ++i) {
    List<WebElement> linkElements =  driver.findElements(By.tagName("a"));
    WebElement currentElement = linkElements.get(i);

    String link = currentElement.getText();
    System.out.println(link);
    if(link != "")
    {
        currentElement.click();
        System.out.println("Working Fine");
    }

    driver.navigate().back();
    Thread.sleep(3000);
}
 类似资料:
  • 我正在使用selenium网络驱动程序来自动化网页。我的selenium代码没有识别链接。我收到以下错误。 线程“main”组织中出现异常。openqa。硒。NoSuchElementException:没有这样的元素:无法定位元素:{“method”:“xpath”,“selector”:“/html/body/font/font/b/a[2]”(会话信息:chrome=44.0.2403.89

  • 但它不起作用并抛出NoSuchElementException NoSuChelementException:消息:找不到元素:{“Method”:“XPath”,“Selector”:“//A[@href=\”WLSwitchInterFace0.wl\“]”}

  • 本文向大家介绍php获取网页上所有链接的方法,包括了php获取网页上所有链接的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php取得网页上所有链接的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的php程序设计有所帮助。

  • 我突然觉得点击链接有问题。这是以前的工作,但现在不是,我不能找出什么是错的。 这是链接的定义方式: 这是我点击链接的代码。其中有几个,我想做的是获取所有这些,这样我就可以遍历所有这些。 它没有通过List语句。它就坐在那里。有什么想法吗?

  • 我必须提取表列“付款日期”中提到的每个日期的报告。每个日期都是报告的链接。所以,我一个接一个地点击所有日期以下载报告。 所以,这里的过程是,当我点击一个日期,它将下载该日期的报告。然后,我将单击“下一个日期”以获取该日期的报告。所以,我做了一个for循环来循环所有的链接,并得到所有日期的报告。 但它给了我一个陈旧的元素例外。单击第一个日期后,无法单击下一个日期。我遇到了错误和代码停止。 我该怎么解

  • 问题内容: Selenium WebDriver出现问题。我尝试单击窗口页面外部的链接(您需要向上滚动才能看到它)。我当前的代码是相当标准的: 我知道我可以向上滚动,并且在这种情况下可以使用。但是,如果您有很长的项目列表,则不必知道向下滚动的距离。 有什么方法可以单击页面可见部分之外的链接(但是如果滚动,该链接将可见)? 附带说明,我使用的是Firefox,但我计划也使用IE7 / 8/9和Chr