Руби Ватир: Нажимаете «ОК» в уведомлениях JavaScript?

Кажется, ни один из кодов, которые я пробовал, не влияет. Мое намерение состоит в том, чтобы закрыть все приглашения JavaScript, которые могут появиться, нажав кнопку «ОК». Проблема в том, что мой сценарий не влияет на всплывающие подсказки. Другими словами, он ничего не делает.

Вот что у меня есть:

fx = FireWatir::Firefox.start(somepage)
fx.startClicker("OK")
fx.button(:id, "OK").click
fx.button(:id, "CONFIRM").click

HTML:

<script type="text/javascript">
    alert("Alert!");
    window.confirm("Confirm?");
</script>

Текст в подсказках может меняться, я намерен нажать OK независимо от того, что находится внутри подсказки предупреждения/подтверждения.

PS: я использую Ubuntu.


person Marco    schedule 12.02.2010    source источник


Ответы (5)


Лучший способ — вообще запретить появление всплывающих окон.

require 'watir'
b = Watir::Browser.start "http://somepagewithdialogs"
# don't return anything for alert
b.execute_script("window.alert = function() {}")

# return some string for prompt to simulate user entering it
b.execute_script("window.prompt = function() {return 'my name'}")

# return null for prompt to simulate clicking Cancel
b.execute_script("window.prompt = function() {return null}")

# return true for confirm to simulate clicking OK
b.execute_script("window.confirm = function() {return true}")

# return false for confirm to simulate clicking Cancel
b.execute_script("window.confirm = function() {return false}")

# interact with some element which would trigger the pop up
b.button(:id => "dialogTrigger").click

См.: http://watirmelon.com/2010/10/31/dismissing-pesky-javascript-dialogs-with-watir/ для более подробной информации.

person Alister Scott    schedule 02.12.2010

Всплывающие окна для меня — черная магия. Вы пробовали решения отсюда?

Я также предлагаю опубликовать свой вопрос на странице watir-general.

person Željko Filipin    schedule 16.02.2010
comment
Использование решения № 3 сработало для меня во второй ссылке Желько выше. Я немного изменил метод startClicker, чтобы он принимал параметр переменной браузера, но в итоге это сработало. - person Derek Morrison; 07.09.2010

Я думаю, что ваш fx.button(:id, "OK").click изменил состояние ожидания.
Но диалоговое окно javascript не меняет состояние.
Так что ваш watir будет ждать вечно.
Если это не так ,Я не знаю.

Действие не изменит состояние, никогда не вернет его.
Поэтому ему нужно нажать кнопку без ожидания.
Когда я использую watir(не firewatir), @ie.button(:id, 'OK').click_no_wait.
Тогда лучше подождите 1~3 секунды для всплывающего окна.
Дальше как хотите.
И, кроме того, если вы хотите контролировать msg-box (всплывающее окно), нужно использовать AutoIT. --Это пример окна ожидания сообщения и нажатия кнопки "ОК" для всплывающего окна IE--

autoit=WIN32OLE.new('AutoItX3.Control')
autoit.WinWait('Windows Internet Explorer')
autoit.WinActive('Windows Internet Explorer')
autoit.ControlClick('Windows Internet Explorer','','OK')

Возможно, я совершенно не понимаю, что вы имеете в виду. Если это так, игнорируйте это.

person tknv    schedule 24.03.2010

Проверьте /var/lib/gems/1.8/gems/firewatir-1.6.5/unittests/html/JavascriptClick.html (при условии, что там установлен ваш гем firewatir). Я провел тест, и это сработало для меня. Возможно, чтение теста даст вам некоторое представление о том, как должен работать startClicker.

person cdwilson    schedule 31.03.2010

это было задано вечность назад, поэтому я просто добавляю что-то более обновленное, что сделало это для меня.

@browser.alert.exists? @browser.alert.ok @browser.alert.close

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

person trickymuffin    schedule 16.01.2018