3

何らかの理由で、gmail などのサイトにログインした後、htmlunit が機能しません。html 要素を見つけることができません。

以下は、問題を示す非常に単純な ruby​​ スクリプトです。webdriver サーバーが、それを実行しているのと同じマシンで実行されていることを前提としていることに注意してください。

require 'rubygems'
require 'watir-webdriver'
require 'rspec/expectations'

##
## THE FOLLOWING TWO WAYS WORK
#
#browser = Watir::Browser.new(:remote, :url => "http://127.0.0.1:4444/wd/hub", :desired_capabilities => :firefox)
#browser = Watir::Browser.new(:remote, :url => "http://127.0.0.1:4444/wd/hub", :desired_capabilities => :internet_explorer)

##
## THIS WAY FAILS
##
capabilities = Selenium::WebDriver::Remote::Capabilities.htmlunit(:javascript_enabled => true)
browser = Watir::Browser.new(:remote, :url => "http://127.0.0.1:4444/wd/hub", :desired_capabilities => capabilities)

#Login to gmail
browser.goto "http://gmail.com"
browser.text_field(:id,'Email').set 'roberttestingstuff041'
browser.text_field(:id,'Passwd').set 'k4238chsj55983w'
browser.button(:id,'signIn').click

sleep 5.0  #sleep shouldnt be needed, but just to be sure we are waiting long enough for log in to complete

frame = browser.frame(:id,'canvas_frame')
#It fails on the next line when using htmlunit
frame.link(:text, 'Sign out').exist?.should == true
frame.link(:text, 'Sign out').visible?.should == true
frame.div(:id, 'guser').exist?.should == true
frame.div(:text,'Compose mail').exist?.should == true

Firefox または IE を使用してブラウザ オブジェクトを作成すると、この簡単なテストが機能することに注意してください。

ログインプロセス中に発生するリダイレクトでハングアップしているようです。私が実際にテストしようとしているサイトは、非常によく似たパターンに従っているため、同じ問題を示すように思われる gmail を使用してこの単純化された例をセットアップしました。

これを合格テストに変えるのを手伝ってくれる人はいますか? HTMLUnitにも基づいているCelerityを使用して同様のテストを機能させることができることに注意してください。これを機能させる方法があると思いますか?

これは webdriver サーバーに表示されるエラーで、属性が見つからないことを明確に示しています。

12:31:16.321 INFO - WebDriver remote server: INFO: Executing: [find element: By.xpath: .//a[normalize-space()='Sign out'
] at URL: /session/1297704604365/element)
12:31:17.996 WARN - WebDriver remote server: WARN:
org.openqa.selenium.NoSuchElementException: Unable to locate a node using .//a[normalize-space()='Sign out']
System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_21'
Driver info: driver.version: EventFiringWebDriver
        at org.openqa.selenium.htmlunit.HtmlUnitDriver.findElementByXPath(HtmlUnitDriver.java:699)
        at org.openqa.selenium.By$6.findElement(By.java:205)
        at org.openqa.selenium.htmlunit.HtmlUnitDriver$4.call(HtmlUnitDriver.java:1133)
4

2 に答える 2

3

Gmail は、ヘッドレス ブラウザ (この場合は Rhino を使用した HtmlUnit) が JavaScript をサポートしていないことを検出していると考えています。

その後のGmailからの返信を見ると

 browser.button(:id,'signIn').click

「JavaScript を有効にする必要があります」ページが表示されます。

p browser.text
 "<style> #loading {display:none} </style> <font face=arial>JavaScript must be enabled in order for you to use Gmail in standard view. However, it seems JavaScript is either disabled or not supported by your browser. To use standard view, enable JavaScript by changing your browser options, then <a href=\"\">try again</a>. <p>To use Gmail's basic HTML view, which does not require JavaScript, <a href=\"?ui=html&zy=c\">click here</a>.</p></font><p><font face=arial>If you want to view Gmail on a mobile phone or similar device <a href=\"?ui=mobile&zyp=c\">click here</a>.</font></p> \n Loading tim.koops@gmail.com\342\200\246 \n\n\n\n Loading standard view | Load basic HTML (for slow connections)"

この場合、Gmail の HTML のみのバージョンを使用して問題を解決することもできますが、残念ながら今のところ行き詰まっていると思います。この失敗したテスト ケースは、レビューのために webdriver 開発者に渡します。

また、これらが実際の G​​mail 資格情報でないことを願っています。

于 2011-02-15T06:10:57.830 に答える
0

HtmlUnit ドライバーの JavaScript を有効にする必要があります。デフォルトでは無効になっています。デフォルトの HTMLUNIT ではなく、Capability HTMLUNITWITHJS を使用します。私は Python バインディングの名前を使用していますが、Ruby も同様のものを使用していると確信しています。

于 2013-02-19T20:23:44.587 に答える