2014-08-22 1 views
0

Я хочу переключиться на iframe, который содержит некоторые ссылки в нем. Мне нужно переключиться на этот iframe и щелкнуть ссылки один за другим. Вот мой код,Невозможно нажимать на все ссылки в Selenium Webdriver. Только первая ссылка нажимается

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

Как это исправить?

+0

Я бы сказал, что когда вы нажимаете на ссылку, вы просто пропускаете весь контент страницы, поэтому больше не возможно использовать другие ссылки. Вы должны открыть ссылку на другой странице. – 5agado

+0

@ 5agado Не могли бы вы ... пояснить свою точку немного больше .... так что я мог бы специально использовать это сам ... В основном я просто хочу щелкнуть все ссылки, которые присутствуют внутри фрейма, это он – Kiran

+0

Попробуйте для использования информации в этом ответе: http://stackoverflow.com/a/24514207/3805954 Существует код для открытия каждой ссылки в новом окне, таким образом вы можете закрыть новое окно, когда захотите, и открыть следующий ссылка сразу после – singe3

ответ

1

Является ли ваше исключение ошибкой NoSuchElement или StaleElementException?

Я надеюсь, что ошибка StaleElementException. Причина в том, что когда вы переходите от страницы и как только вы вернетесь. предыдущие объекты станут «Stale».

Ниже логика, которую я получил от 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(); 
} 

Дайте нам знать, если выше помогает.

+0

Нет, не работает ... tq – Kiran

+0

+1 Uday для вашего опрятного объяснения. – kamesh

+0

@Kiran, может, дайте мне знать, что не работает для вас? Можете ли вы также опубликовать код, который пытается попробовать? – Uday

0

Ниже приведен код, который я пробовал для сайта Google.

Положите дополнительную проверку как link.getText(), так как существует много ссылок с пустыми текстами, и link.click может не работать там. Так просто сделать «если» условие, прежде чем нажать на него, как указано в ниже код

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(); 
     } 
    } 

}

Логика проста каждая итерация в цикл повторно идентифицирует объект, но мы навигационный к следующему ссылку, увеличивая значение индекса.

Смежные вопросы