【问题标题】:How to deal with modals not opening in PhantomJS?如何处理未在 PhantomJS 中打开的模式?
【发布时间】:2014-10-29 06:03:51
【问题描述】:

我有一个 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') ") 的值来处理这种模式 - 但问题仍然存在。

【问题讨论】:

  • 点击应该有效。您可能必须等到模式可见/不可见。顺便说一句,这些是模态而不是弹出窗口。有关 CasperJS 的示例,请参阅 this。不要忘记将视口大小设置为类似桌面的东西。
  • @ArtjomB.,哦!你是对的,如果我等待一段时间,它会打开很好:-) 我认为点击不同的链接后它不需要一些时间。

标签: javascript forms modal-dialog phantomjs watir


【解决方案1】:

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

$browser.driver.manage.window.maximize

【讨论】:

    【解决方案2】:

    模态可以以不同的方式实现。有时它们是动画的,因此必须等到它们完全可见才能进一步处理它们。

    你可以使用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'
    

    【讨论】:

    • 谢谢,转场让我误以为问题出在模态本身:-)
    猜你喜欢
    • 2015-09-28
    • 2013-06-07
    • 1970-01-01
    • 2017-05-20
    • 2016-11-07
    • 2016-08-01
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    相关资源
    最近更新 更多