我们的网站在整个网站上都有多个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
答案 0 :(得分: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
答案 1 :(得分:0)
这有帮助吗?
browser.a(:href, 'http://www.hayneedle.com/bath/').when_present.click
有关等待的详细信息,请参阅http://watirwebdriver.com/waiting/