Ruby Watir: Нажав OK на оповещениях JavaScript - PullRequest
9 голосов
/ 12 февраля 2010

Кажется, ни один из кодов, которые я пробовал, не имеет никакого влияния. Мое намерение состоит в том, чтобы закрыть все без исключения подсказки 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>

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

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

Ответы [ 5 ]

6 голосов
/ 02 декабря 2010

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

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/.

0 голосов
/ 16 января 2018

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

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

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

0 голосов
/ 24 марта 2010

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

Действие не изменит состояние, никогда не вернет его.
Так что нужно нажать не ждать.
Когда я использую 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')

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

0 голосов
/ 01 апреля 2010

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

0 голосов
/ 16 февраля 2010

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

Я бы также предложил опубликовать ваш вопрос на watir-general .

...