无法使用phantomjs watirwebdriver执行任何操作

时间:2015-03-16 18:24:42

标签: ruby selenium watir watir-webdriver

我无法通过使用phantomjs webdriver无头执行来执行任何操作,例如在网页上填写文本框,单击按钮等。

require 'watir-webdriver'
b=Watir::Browser.new :phantomjs
b.goto "google.com"
b.title # Google
b.text_field(:id => "lst-ib").set "Avinash"

因此,在填写文本框时,我面临以下问题。

Watir::Exception::UnknownObjectException: unable to locate element,
using {:id=>"lst-ib", :tag_name=>"input or textarea", :type=>"(any
text type)"}    from
/Library/Ruby/Gems/2.0.0/gems/watir-webdriver-0.6.10/lib/watir-webdriver/elements/element.rb:508:in
`assert_exists'     from
/Library/Ruby/Gems/2.0.0/gems/watir-webdriver-0.6.10/lib/watir-webdriver/user_editable.rb:11:in
`set'   from (irb):16   from /usr/bin/irb:12:in `<main>'

使用firefox时,相同的脚本工作正常,无需无头执行。如果有任何建议,请告诉我。

以下是我的宝石版本:
1. watir-webdriver(0.6.10)
2. selenium-webdriver(2.45.0,2.43.0)
3. phantomjs 2.0.0

1 个答案:

答案 0 :(得分:4)

主要问题似乎是PhantomJS看到的HTML与Firefox不同。

在Firefox中,文本字段的HTML为:

<input spellcheck="false" dir="ltr" style="border: medium none; padding: 0px; margin: 0px; height: auto; width: 100%; background: url(&quot;data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw%3D%3D&quot;) repeat scroll 0% 0% transparent; position: absolute; z-index: 6; left: 0px; outline: medium none;" aria-autocomplete="both" role="combobox" aria-haspopup="false" class="gsfi lst-d-f" id="lst-ib" maxlength="2048" name="q" autocomplete="off" title="Search" value="" aria-label="Search" type="text">

与此相反,PhantomJS显示:

<input style="color: rgb(0, 0, 0); margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 0px; padding-left: 6px; vertical-align: top; outline-style: none; outline-width: initial; outline-color: initial; " autocomplete="off" class="lst" value="" title="Google Search" maxlength="2048" name="q" size="57" dir="ltr" spellcheck="false">

请注意,PhantomJS没有id属性。因此,通过ID查找字段失败是有道理的。

您需要使用其他定位器。例如:

b.text_field(:name => "q").set("Avinash")

b.text_field(:title => "Google Search").set("Avinash")