我无法通过使用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
答案 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("data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw%3D%3D") 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")