Всплывающее окно Watir и javascript

Я только начал изучать Ватир... Я застрял с этим:

Я пытаюсь заставить Watir щелкнуть (и прочитать содержимое) этого всплывающего окна javascript:

http://www.w3schools.com/js/tryit.asp?filename=tryjs_alert

Мой код Watir выглядит так:

require 'watir'
b = Watir::Browser.start "www.w3schools.com/js/tryit.asp?filename=tryjs_alert"
b.maximize
b.frame(:name, "view").button(:text, "Show alert box").click
b.javascript_dialog.button('OK').click

... Но это не работает, Ватир не нажимает кнопку «ОК» во всплывающем окне.

Я знаю, что Watir-Webdriver может обрабатывать всплывающие окна ("browser.alert.ok"), но может ли это сделать "классический" Watir только для IE (без каких-либо сложных хаков, с использованием AutoIt / Sikuli и т. д.)?

EDIT: мне удалось полностью удалить всплывающее окно с помощью этой строки:

b.frame(:name, "view").execute_script("window.alert = function() {}")

Лучше, чем ничего, теперь тесты не будут зависать на всплывающие окна, но подтвердить/читать всплывающие окна все равно не могу...


person apk    schedule 25.07.2012    source источник


Ответы (1)


Похоже, что после того, как Ватир нажимает кнопку, чтобы открыть диалоговое окно javascript, он ждет чего-то, чего никогда не получает.

Решение состоит в том, чтобы нажать кнопку с click_no_wait. Попробуйте это вместо этого:

require 'watir'
b = Watir::Browser.start "www.w3schools.com/js/tryit.asp?filename=tryjs_alert"
b.maximize
b.frame(:name, "view").button(:text, "Show alert box").click_no_wait
b.javascript_dialog.button('OK').click

Обновление: только что заметил, что это задокументировано в вики Watir - http://wiki.openqa.org/display/WTR/JavaScript+Pop+Ups (см. первый пример).

person Justin Ko    schedule 25.07.2012
comment
Да, это может быть решением... Только одна небольшая проблема: использование click_no_wait приводит к полному сбою Ruby, Windows закрывает его и хочет отправить отчет об ошибке в Microsoft... (Я использую XP SP3, Ruby 1.9.3p194, Watir 3.0 .0.) - person apk; 25.07.2012
comment
Я использовал Win7, Ruby 1.8.7, Watir 3.0.0. - person Justin Ko; 25.07.2012
comment
После понижения Ruby до 1.9.2 больше не происходит сбой при click_no_wait. Однако Watir по-прежнему отказывается нажимать всплывающее окно. - person apk; 25.07.2012
comment
Установите $DEBUG=true непосредственно перед #click_no_wait — вы видите какие-либо сообщения об ошибках? - person Jarmo Pertman; 25.07.2012
comment
Как я только что сказал, больше нет ошибки с click_no_wait. Это было исправлено путем установки более старой версии Ruby (1.9.2). Но строка b.javascript_dialog.button('OK').click по-прежнему не работает. - person apk; 25.07.2012
comment
@JarmoPertman, исключение, которое я видел как для этого, так и для полей файла (с Ruby 1.9.3), похоже, такое же, как и в Проблема 31 автоматизации - person Justin Ko; 27.07.2012