По какой-то причине после входа на сайт, такой как gmail, htmlunit не работает. Не удается найти элементы HTML.
Ниже приведен очень простой скрипт ruby, показывающий проблему, обратите внимание, что предполагается, что сервер веб-драйвера работает на той же машине, на которой он работает:
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, который, похоже, показывает ту же проблему.
Может кто-нибудь помочь превратить это в прохождение теста? Обратите внимание, что я могу получить аналогичный тест для работы с Celerity, который также основан на HTMLUnit, поэтому я считаю, что должен быть какой-то способ заставить эту работу?
Это ошибка, которая отображается на сервере веб-драйвера, ясно показывая, что он не может найти атрибут:
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)