繁体   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