Тесты с использованием Webdriver с удаленным HTMLUnit не могут войти в Gmail - PullRequest
3 голосов
/ 14 февраля 2011

По какой-то причине после входа на сайт, такой как 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)

Ответы [ 2 ]

3 голосов
/ 15 февраля 2011

Я думаю, что Gmail обнаруживает наш безголовый браузер (в данном случае HtmlUnit с Rhino) не поддерживает 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, чтобы помочь вам, но, к сожалению, я думаю, что мызастрял на данный момент.Я передам этот провальный тестовый пример разработчикам веб-драйверов для проверки.

Кроме того, надеюсь, что это не ваши настоящие учетные данные Gmail!

0 голосов
/ 20 февраля 2013

вам нужно включить JavaScript для драйвера HtmlUnit. Это отключено по умолчанию. Используйте возможность HTMLUNITWITHJS, а не HTMLUNIT по умолчанию. Я использую имена в привязках Python, но я уверен, что Ruby использует нечто подобное.

...