Java 无法单击Selenium Webdriver中的所有链接。只能单击第一个链接

Java 无法单击Selenium Webdriver中的所有链接。只能单击第一个链接,java,selenium,hyperlink,selenium-webdriver,Java,Selenium,Hyperlink,Selenium Webdriver,我想切换到包含一些链接的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 wa

我想切换到包含一些链接的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();
    }
}
publicstaticvoidmain(字符串[]args){
//TODO自动生成的方法存根
WebDriver=newfirefoxdriver();
驱动程序。获取(“http://timesofindia.indiatimes.com/home");
WebDriverWait wait=新的WebDriverWait(驱动程序,200);
wait.until(ExpectedConditions.presenceOfElementLocated(By.id(“riShop”));
driver.switchTo().frame(“riShop”);
List lst=driver.findElements(按.tagName(“a”));
对于(inti=0;i
在上面的代码中,只有第一个链接被点击,然后我得到一个异常,比如“找不到下一个元素”NoSuchException


如何修复此问题?

您的异常是NoTouchElement还是StaleElement异常错误

我希望错误是StaleElementException。原因是,当你离开页面时,一旦你回来。以前的对象将变为“过时”

以下是我在前面遇到这个问题时得到的逻辑:

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();
}
for(int i=0;true;i++)
{
列表链接=driver.findElements(按.tagName(“a”));
如果(i>=links.size())
打破
links.get(i.click();
System.out.println(driver.getTitle());
driver.navigate().back();
}

让我们知道上面的内容是否有用。

以下是我在谷歌网站上尝试的代码

将额外的验证放在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();
        }
    }
publicstaticvoidmain(字符串[]args)
{
//TODO自动生成的方法存根
WebDriver=newfirefoxdriver();
驱动程序。获取(“http://www.google.com");
for(int i=0;true;i++)
{
列表链接=driver.findElements(按.tagName(“a”));
如果(i>=links.size())
打破
if(!links.get(i).getText().isEmpty())
{
links.get(i.click();
System.out.println(driver.getTitle());
driver.navigate().back();
}
}
}


逻辑很简单,for循环中的每次迭代都会重新标识对象,但我们通过增加索引值导航到下一个链接。

我想说的是,当您单击该链接时,您只会错过页面的所有内容,因此无法再使用其他链接。你应该在另一个页面中打开链接。@5agado你能不能…再澄清一下你的观点…这样我就可以专门使用它本身了…基本上我只想单击框架内的所有链接,这些链接很难使用此答案中的信息:有一个代码可以在新窗口中打开每个链接,这样,您可以在需要时关闭新窗口,然后打开下一个链接after@Kiran,你能告诉我什么不适合你吗?你也可以发布你正在尝试的代码吗?@Uday我已经粘贴了上面的全部代码。虽然当我进入框架并尝试逐个单击所有链接时..链接会在另一个窗口中打开。但这无论如何都不重要,因为我只需单击主窗口中的链接一个一个..我可以给你URL:-,在这个页面中,请找到ID为“riShop”的框架,在这个框架中,我必须逐个单击链接。请建议me@Uday.Output:-我可以单击第一个链接,然后在线程“main”中得到类似-->exception的异常org.openqa.selenium.ElementNotVisibleException:元素当前不可见,因此可能无法交互..您是否尝试过我的代码,下面的代码在我的系统中运行良好。