簡體   English   中英

無法單擊Selenium Webdriver中的所有鏈接。僅第一個鏈接被單擊

[英]Not able to click on all the links in Selenium Webdriver.Only the first link gets clicked

我想切換到包含一些鏈接的iframe。 我需要切換到該iframe,然后逐個單擊鏈接。 這是我的代碼,

public static void main(String[] args) {
    // TODO Auto-generated method stub
    WebDriver driver = new FirefoxDriver();
    driver.get("http://timesofindia.indiatimes.com/home");
    WebDriverWait wait = new WebDriverWait(driver,200);
    wait.until(ExpectedConditions.presenceOfElementLocated(By.id("riShop")));
    driver.switchTo().frame("riShop");

    List<WebElement> lst = driver.findElements(By.tagName("a"));
    for(int i = 0; i < lst.size(); i++) {
        lst.get(i).click();
        driver.navigate().back();
    }
}

在上面的代碼中,僅第一個鏈接被單擊,然后出現異常,例如“無法找到下一個元素” NoSuchException

我該如何解決?

您的異常是NoSuchElement還是StaleElementException錯誤?

我希望錯誤是StaleElementException。 原因是,當您離開頁面導航並返回時。 先前的對象將變為“陳舊”。

以下是我較早遇到此問題時從SO得到的邏輯:

for (int i=0; true; i++)
{
    List<WebElement> links = driver.findElements(By.tagName("a"));
    if (i >= links.size())
        break;
    links.get(i).click();
    System.out.println(driver.getTitle());
    driver.navigate().back();
}

讓我們知道以上是否有幫助。

以下是我為Google網站嘗試的代碼。

將額外的驗證作為link.getText()放置,因為可能存在許多帶有空文本的鏈接,而link.click可能在那里不起作用。 因此,只需按下面的代碼中的指定,在使其成為“ if”條件之前

public static void main(String[] args) 
{
        // TODO Auto-generated method stub
    WebDriver driver = new FirefoxDriver();
    driver.get("http://www.google.com");

    for (int i=0; true; i++)
    {
        List<WebElement> links = driver.findElements(By.tagName("a"));
        if (i >= links.size())
            break;
        if(!links.get(i).getText().isEmpty())
        {
            links.get(i).click();
            System.out.println(driver.getTitle());
            driver.navigate().back();
        }
    }

}

邏輯很簡單,for循環中的每次迭代都可以重新標識對象,但是我們通過增加索引值來導航到下一個鏈接。

暫無
暫無

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

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