2013-07-25 10 views
3

Наш сайт имеет несколько всплывающих окон javascript на всем сайте. Когда вы нажимаете кнопку, чтобы открыть всплывающее окно, экран слегка серо, а анимированное изображение показывает, а затем загружает фактическое всплывающее окно. Когда всплывающее окно закрывается, оно исчезает вместе со слегка серым экраном. Я могу открыть и использовать wait_until_present, чтобы нажать кнопку закрытия, но мои тесты всегда терпят неудачу, потому что следующий элемент не доступен для кликов. Он будет работать со спинами, но хочет держаться подальше от этого. Я попытался использовать другие методы ожидания для следующего элемента, но не могу найти лучший способ. Ниже приведен пример того, что я пытаюсь сделать.Нажатие на элемент после того, как анимированное всплывающее окно закрывается

require 'watir-webdriver' 

browser = Watir::Browser.new :chrome 
browser.goto('www.hayneedle.com') 

browser.img(:src, 'http://images.hayneedle.com/shared/images/HN_Free_Shipping_Easy_Returns_Low.png').click 

browser.a(:id, 'hn_modal_close').wait_until_present 
browser.a(:id, 'hn_modal_close').click 

#this is the element that is not clickable because the popup is still closing 
browser.a(:href, 'http://www.hayneedle.com/bath/').click 

ответ

3

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

Когда я запустил свой код, я получил исключение:

Element is not clickable at point (449, 142). Other element would receive the click: <div id="hn_modal_bg"></div> (Selenium::WebDriver::Error::UnknownError) 

Таким образом, мы, вероятно, следует подождать для <div id="hn_modal_bg"></div> исчезнуть. Это можно сделать, используя метод wait_while_present.

browser.a(:id, 'hn_modal_close').wait_until_present 
browser.a(:id, 'hn_modal_close').click 

#Wait for the gray background to disappear 
browser.div(:id, 'hn_modal_bg').wait_while_present 

browser.a(:href, 'http://www.hayneedle.com/bath/').click 
+0

Oh man Спасибо! Я пытался это, но использовал неправильный div, тот, что был выше hn_modal_bg. Еще раз спасибо! –

+0

Удался с этой техникой. Нам нужно было нажать кнопку после того, как диалоговое окно JQuery исчезло, изначально я попробовал дождаться нажатия кнопки, но я продолжал получать исключения. Наконец использовал этот подход, и теперь он работает каждый раз. –

0

Помогает ли это?

browser.a(:href, 'http://www.hayneedle.com/bath/').when_present.click 

Для получения дополнительной информации о ожидании см http://watirwebdriver.com/waiting/

+0

К сожалению, нет, что-то вроде, что он говорит, что другой элемент получит щелчок и элемент дает это DIV класс, во всплывающем окне. Даже если оставить всплывающее окно открытым и сделать puts .present? на элементе за ним он возвращает true. Таким образом, любой из методов ожидания не работает, потому что watir-webdriver думает, что он доступен для клика. –

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