我想切换到包含其中一些链接的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();
}
}
在上面的代码中,只有第一个链接被点击,然后我得到一个例外&#34;无法找到下一个元素&#34; NoSuchException
我该如何解决这个问题?
答案 0 :(得分:1)
你的异常是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();
}
如果上述情况有帮助,请告诉我们。
答案 1 :(得分:1)
以下是我为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循环中的每次迭代都会重新识别对象,但我们通过增加索引值导航到下一个链接。