如何处理未在PhantomJS中打开的模态?

时间:2014-10-29 06:03:52

标签: javascript forms modal-dialog phantomjs watir

我有 Watir 代码,使用 Phantomjs 作为无头浏览器。我尝试使用此代码在网站上填写表单(因为Phantomjs在简单点击(browser.link(id: 'choise-sity').click))时不会显示模式:

require 'watir'

browser = Watir::Browser.new :phantomjs
browser.goto 'http://sales.ubrr.ru/open'

browser.execute_script(" $('#modalCityChoise').show();$('#modalCityChoise').css({'opacity':'1', 'top':'0'})")
browser.link(text: 'Архангельск').click

browser.screenshot.save 'a.png'

当前代码确实显示模态,但我之后无法点击其中的链接 我的问题是:是否有更简单的方法来处理PhantomJS中的模态 - 他们说他们增加了对模态的支持?或者如何通过javascript注入来处理这个特定的例子?

编辑:我设法通过更改隐藏输入browser.execute_script(" $('#OpenBkiForm_city_code').val('4600000100000') ")的值来处理此模式 - 但问题仍然存在。

2 个答案:

答案 0 :(得分:3)

我误解了这个问题 - 模型由Phantomjs正确管理,但我无法证明这一点,因为在我的截图时它们才开始淡入,我没有想到。
真正的问题是我无法按下模态窗口中的按钮。事实证明这是因为窗口大小 - 即使截图捕获了按钮,Watir也无法以某种方式访问​​它。这解决了整个问题:

$browser.driver.manage.window.maximize

答案 1 :(得分:1)

模态可以不同方式实现。有时它们是动画的,这使得必须等到它们完全可见,然后再进一步处理它们。

在您的情况下,您可以使用Wait:until

browser.goto 'http://sales.ubrr.ru/open'
Watir::Wait.until { browser.a(:id => "modalCityChoise").visible? }
browser.link(text: 'Архангельск').click
browser.screenshot.save 'a.png'