Метод ожидания watir-webdriver для IE9 - PullRequest
1 голос
/ 18 ноября 2011

Я пытаюсь заставить мой код (разработанный с Watir для IE8) работать с watir-webdriver и IE9. В настоящее время у меня есть проблема с ожиданием.

Например

Watir::Wait.until{browser.button(:value, "Login").exists?}

Он не ждет и выдает мне следующую ошибку

C:/Ruby192/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.12.2/lib/selenium/webdriver/remote/response.rb:50:in `assert_ok': Unable to find element with xpath == .//button[
text()='Login'] | .//input[@value='Login' and (@type='button' or @type='reset' or @type='submit' or @type='image')] (Selenium::WebDriver::Error::UnexpectedJavascriptError
)
        from C:/Ruby192/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.12.2/lib/selenium/webdriver/remote/response.rb:15:in `initialize'
        from C:/Ruby192/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.12.2/lib/selenium/webdriver/remote/http/common.rb:58:in `new'
        from C:/Ruby192/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.12.2/lib/selenium/webdriver/remote/http/common.rb:58:in `create_response'
        from C:/Ruby192/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.12.2/lib/selenium/webdriver/remote/http/default.rb:64:in `request'
        from C:/Ruby192/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.12.2/lib/selenium/webdriver/remote/http/common.rb:39:in `call'
        from C:/Ruby192/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.12.2/lib/selenium/webdriver/remote/bridge.rb:450:in `raw_execute'
        from C:/Ruby192/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.12.2/lib/selenium/webdriver/remote/bridge.rb:428:in `execute'
        from C:/Ruby192/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.12.2/lib/selenium/webdriver/remote/bridge.rb:396:in `find_element_by'
        from C:/Ruby192/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.12.2/lib/selenium/webdriver/common/search_context.rb:41:in `find_element'
        from C:/Ruby192/lib/ruby/gems/1.9.1/gems/watir-webdriver-0.3.9/lib/watir-webdriver/locators/element_locator.rb:86:in `find_first_by_multiple'
        from C:/Ruby192/lib/ruby/gems/1.9.1/gems/watir-webdriver-0.3.9/lib/watir-webdriver/locators/element_locator.rb:33:in `locate'
        from C:/Ruby192/lib/ruby/gems/1.9.1/gems/watir-webdriver-0.3.9/lib/watir-webdriver/elements/button.rb:53:in `locate'
        from C:/Ruby192/lib/ruby/gems/1.9.1/gems/watir-webdriver-0.3.9/lib/watir-webdriver/elements/element.rb:259:in `assert_exists'
        from C:/Ruby192/lib/ruby/gems/1.9.1/gems/watir-webdriver-0.3.9/lib/watir-webdriver/elements/element.rb:36:in `exists?'
        from 1.rb:20:in `block in <main>'
        from C:/Ruby192/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.12.2/lib/selenium/webdriver/common/wait.rb:36:in `until'
        from 1.rb:20:in `<main>'

Пробовал один и тот же скрипт с IE8 и имел ту же проблему. Конечно, я могу обойти это с помощью сна, но это не очень хорошая идея. Если я посплю несколько секунд перед ожиданием, все будет хорошо.

Ответы [ 2 ]

1 голос
/ 18 ноября 2011

Попробуйте:

browser.button(:value, "Login").wait_until_present

Дополнительная информация: http://rubydoc.info/github/jarib/watir-webdriver/master/Watir/Element#wait_until_present-instance_method

0 голосов
/ 18 ноября 2011

Если это происходит сразу после появления страницы ошибки сертификации из-за того, что ваш тестовый сервер использует «недействительный» (самоподписанный) сертификат, у вас есть два варианта.

1) Добавьте сертификаты с ваших тестовых серверов в ваш пул доверенных корневых центров сертификации на вашей клиентской тестовой системе. Это заставляет IE обращаться с этими сертификатами так, как будто они получены от доверенного поставщика. (никогда не делайте этого для сайта в сети, только для тестовых серверов, которые вы или кто-то из вашей компании контролирует)

2) Проведи там сон.

Проблема возникает из-за того, что IE9 делает некоторые специальные вещи на той странице сертификата, которая блокирует javascript и не позволяет веб-драйверу получать доступ практически ко всему на странице. Даже простые базовые методы, такие как browser.text, потерпят неудачу на этой странице, тем более проверяя наличие элемента. Первая проверка кнопки входа в систему происходит, когда страница предупреждения о недействительном сертификате все еще отображается, и именно это вызывает ошибку. Если страница никогда не отображается или вы ждете немного времени, вы не увидите эту ошибку.

То, что MS делает на этой странице, предназначено для предотвращения того, чтобы вредоносный сайт автоматизировал ответ, который перенесет вас на их сайт. Хорошая защита, но она также блокирует доступ Webdriver к странице. Я сомневаюсь, что пользователи веб-драйверов найдут способ преодолеть это, и если бы они это сделали, я бы ожидал, что MS вскоре закроет то, что они посчитают «дырой в безопасности».

Для тестирования я убежден, что лучше всего добавлять самозаверяющие сертификаты с тестовых серверов в список доверенных корневых провайдеров в ваших тестовых клиентских системах. Это устраняет предупреждения и, кроме того, быстрее и проще, чем работа с ним во всей вашей автоматизации. Он также дублирует взаимодействие с пользователем, когда он попадает на ваш подлинный производственный сервер, который, без сомнения, имеет действительный сертификат и никогда не выдает это предупреждение.

Раньше я занимался поиском путей «написания сценариев», но понял, что просто упрям ​​и должен идти по более простому практическому пути.

...