2015-08-29 4 views
2

У меня есть страница, на которой я нажимаю ссылку, которая открывает новое окно Modal с iframe. Я переключился на iframe и выполнил некоторую проверку, затем щелкнул ссылку в этом окне Modal, которое, в свою очередь, открывает второе новое окно Modal с iframe. Я сталкиваюсь с проблемой нажатия на любой элемент в этом втором новом окне Modal.Selenium не может найти элемент в модальном окне с iframes

Вот мой код.

WebElement Hotelname = driver.findElement(By.cssSelector(".hotelTitleZone2>a")); 
Hotelname.click(); \\This will open a new Pop up. 

driver.switchTo().frame(1); 
\\perform some validation 
String parentHandle = driver.getWindowHandle(); 
driver.findElement(By.linkText("View on a Map")).click(); \\This will open second pop up Modal window 

for (String winHandle : driver.getWindowHandles()) { 
    driver.switchTo().window(winHandle); 
} 
driver.switchTo().defaultContent(); 
driver.switchTo().frame(1); \\switching to frame 
driver.findElement(By.linkText("Close")).click(); 

Когда я бегу этот код, я получаю ошибку:

org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"link text","selector":"Close"}

Я попытался с или без переключения по умолчанию содержания, без переключения на кадр в окне второго модального но результат всегда одно и то же.

Любая помощь приветствуется? Благодарю.

+0

Если проблема решена, отметьте ее как ответ, это поможет сообществу Stackoverflow. –

ответ

1

Мое понимание:

  1. начало из окна по умолчанию
  2. нажмите, чтобы открыть первое окно модальных, который имеет IFRAME
  3. Переключить на этот новый IFRAME (индекс = 1)
  4. Get ID для текущего дескриптора окна, который является дескриптором окна по умолчанию
  5. Нажмите, чтобы открыть второе окно модальное, имеющее второй iframe
  6. переключатель ко второму окну модального
  7. переключателя обратно в окно по умолчанию
  8. переключателя для фрейма (индекс = 1)
  9. Найти кнопку вы после

Есть несколько неурядиц здесь:

  • в шаге 4 выше, вы использовали String parentHandle = driver.getWindowHandle(); для хранения исходного дескриптора окна по умолчанию, но вы его никогда не использовали, вместо этого вы используете driver.switchTo(). defaultContent();
  • Что случилось с первым окном Modal после того, как вы его нажали? Он закрылся? если он не был закрыт, его iframe все равно будет iframe (index = 1), это объясняет, почему вы не смогли найти свою кнопку из iframe (index = 1); поскольку ваша кнопка будет находиться на iframe, который принадлежит ко второму окну Modal, который, вероятно, будет iframe (index = 2). Вы можете использовать driver.switchTo(). Frame (2);, чтобы решить эту проблему. Разумеется, вы можете проверить элементы HTML, чтобы узнать, сколько фреймов присутствует и к каким модальным окнам они принадлежат.

Надеюсь, вы найдете это полезным.

+0

Да, я написал код String parentHandle = driver.getWindowHandle() раньше, но не использовал его. Без этого кода результат будет таким же. Первое окно модальное остается в фоновом режиме. Добавление драйвера.switchTo(). ActiveElement(); после перехода от iframe сделал трюк. Теперь он работает нормально. Спасибо за вашу помощь. – Naseem

+0

Если этот ответ решит вашу проблему, отметьте его как ответ на награду Ю Чжан за его работу и отметьте вопрос, как ответили. Благодаря! – JeffC