【问题标题】:Get all the non-hidden links in a webpage and click using Selenium Webdriver使用 Selenium Webdriver 获取网页中的所有非隐藏链接并单击
【发布时间】:2023-03-04 23:33:01
【问题描述】:

如何使用 Selenium WebDriver 获取网页中的所有链接并点击(隐藏链接应消除)?

我想点击页面上可见的链接。

public  void linksclick() throws Exception{ 

    System.setProperty("webdriver.chrome.driver", "path of chrome driver");
    WebDriver driver = new ChromeDriver();
    baseUrl = "www.example.com";
    driver.get(baseUrl);
    //driver.get(baseUrl);
    List<WebElement> allLinks = driver.findElements(By.tagName("a"));
    System.out.println("All Links--> " + allLinks.size());
    //Fetching an nth Link
    System.out.println(" 1st Link is-->  " + allLinks.get(1).getText());
    //Fetching all the Links


    for (int i=0;i<allLinks.size();i++){
        String homeWindow;
        String currentWindow;
        List<WebElement> allLinks1 = driver.findElements(By.tagName("a"));
        Thread.sleep(2000);
        System.out.println(allLinks1.get(i).getText()); 
        if((allLinks1.get(i).getText() == null | (allLinks1.get(i).getText()).equalsIgnoreCase("")|allLinks1.get(i).getAttribute("href") == null | allLinks1.get(i).getCssValue("font-size")==null | allLinks1.get(i).getCssValue("font-size")==null | allLinks1.get(i).getCssValue("font-size") == null
                   | allLinks1.get(i).getCssValue("font-weight")== null | allLinks1.get(i).getCssValue("text-align")== null 
                   | allLinks1.get(i).getCssValue("font-family")== null | allLinks1.get(i).getCssValue("color")== null))
                 {//DO NOTHING
        }

        else{
        Thread.sleep(2000);
        System.out.println(allLinks1.get(i).getText()); 
        //Thread.sleep(1000);
        homeWindow = driver.getWindowHandle().toString();
        allLinks1.get(i).click();
        Thread.sleep(2000);
        currentWindow = driver.getWindowHandle().toString();
        if(homeWindow.contentEquals(currentWindow)){

            //Do nothing

            }else {
                driver.close();
                driver.switchTo().window(homeWindow);
            //closechild window
            //focus on homewindow

            }
        driver.navigate().to(baseUrl);  
        }
    }
}

请帮我解决。

【问题讨论】:

    标签: java selenium selenium-webdriver


    【解决方案1】:

    你可以试试这样的:

    if (allLinks1.get(i).isDisplayed())
    {
        allLinks1.get(i).click();
    }
    

    如果这不符合您的要求,您可以在上面的 if 语句中包含allLinks1.get(i).isEnabled()

    【讨论】:

      【解决方案2】:

      您的代码有几个问题需要修复才能正常工作。

      确保您的网址确实有效:“http://www.example.com”,而不仅仅是“www.example.com”。

      列表使用从零开始的索引。所以不要使用allLinks.get(1),而是使用allLinks.get(0)。由于站点上只有一个链接,而您的代码试图获取列表中的第二个链接,您会得到一个 IndexOutOfBoundsException。

      这应该有助于您的代码运行。

      忠告:为变量提供更具描述性的名称,以便您的代码有助于注释自身。例如,看起来你在循环的每次迭代中创建一个所有链接的新列表的原因是你不会有过时的元素。因此,不要将该变量命名为 allLinks1,而是将其命名为 freshListOfAllLinks,这样您的代码在做什么会更明显。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-29
        • 1970-01-01
        • 2020-02-28
        • 2014-12-27
        • 1970-01-01
        • 1970-01-01
        • 2012-06-22
        相关资源
        最近更新 更多