簡體   English   中英

獲取網頁中的所有非隱藏鏈接,然后使用Selenium Webdriver單擊

[英]Get all the non-hidden links in a webpage and click using Selenium Webdriver

如何使用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);  
        }
    }
}

請幫我解決。

您可以嘗試使用以下方法:

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

如果那不能滿足您的要求,則可以在上述if語句中包括allLinks1.get(i).isEnabled()

您的代碼有幾個問題,需要對其進行修復才能使其正常工作。

確保您的網址實際上是有效的:“ http://www.example.com ”,而不只是“ www.example.com”。

列表使用從零開始的索引。 因此,請使用allLinks.get(0)代替allLinks.get(1) allLinks.get(0) 由於網站上只有一個鏈接,並且您的代碼正試圖獲取列表中的第二個鏈接,因此您將獲得IndexOutOfBoundsException。

那應該可以幫助您的代碼運行。

忠告:為變量提供更多描述性名稱,以便您的代碼有助於注釋自身。 例如,看起來像在循環的每次迭代中都為所有鏈接創建新列表的原因是,這樣您就不會有過時的元素。 因此, allLinks1命名該變量allLinks1allLinks1將其命名為freshListOfAllLinks ,這樣您的代碼就可以很清楚地看到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM