Для Ватира:
Существуют некоторые действия, которые в настоящее время ожидают загрузки страницы, например .click
, .select
, потому что после таких действий страница часто обновляется с помощью обратной передачи или публикации формы. Для них существует вариант _no_wait
, позволяющий скрипту продолжать работу, не дожидаясь загрузки страницы при появлении всплывающего окна.
В настоящее время .set
не ожидает ожидания загрузки страницы (насколько я знаю в любом случае) и, следовательно, _no_wait
вариант метода. Так что вы, вероятно, можете просто перейти от установки значения к поиску всплывающего окна.
Обратите внимание, что если вы не видите всплывающее окно после использования .set
, вам может потребоваться вызвать событие onkeyup, чтобы запустить сценарии на стороне клиента. Также убедитесь, что это действительно всплывающее окно JS, есть много других способов делать вещи, которые выглядят как всплывающие окна JS, но на самом деле это просто вещи вроде div и т. Д.
Поскольку это Javascript Popup , вы должны быть в состоянии избавиться от него с помощью кода, аналогичного примерам Watir Wiki
browser.javascript_dialog.button('OK').click
Для Watir-Webdriver:
Если вы используете Watir-Webdriver, то все немного по-другому. Здесь я расскажу немного подробнее, потому что эта информация не так легко доступна (пока)
У Webdriver есть API оповещений, а у Watir-Webdriver есть помощник по оповещениям, который использует это, с несколькими различными методами для работы с различными стилями всплывающих окон javascript. Методы описаны в RDoc для watir-webdriver , ищите «alertthelper» в основном классе watir. Вот примеры, приведенные там.
require "watir-webdriver/extensions/alerts" #add to require section at top of script)
browser.alert do
browser.button(:value => "Alert").click
end #=> "the alert message"
browser.confirm(true) do
browser.button(:value => "Confirm").click
end #=> "the confirm message"
browser.prompt("hello") do
browser.button(:value => "Prompt").click
end #=> { :message => "foo", :default_value => "bar" }
Обратите внимание, что эти примеры взяты прямо из тестов rspec для кода alertthelper. Как таковые, они могут не иметь для вас полного смысла, не зная этой мелочи Метод click внутри цикла - это действие, при котором появляется предупреждение. На тестовой веб-странице есть три кнопки со значениями Alert, Confirm, Prompt, которые заставляют всплывающие окна появляться при выполнении тестов на этой странице.
Чтобы использовать этот материал в своем коде, замените эту среднюю строку на любое действие в вашем скрипте, вызывающее всплывающее окно. Например, в одном из моих скриптов я нажимаю кнопку, чтобы удалить кредитную карту пользователя, и появляется диалоговое окно подтверждения. В итоге мой код выглядит следующим образом (обратите внимание, что этот код предназначен для работы как с watir, так и с watir-webdriver, $ webdriver устанавливается в значение true или false в зависимости от того, какой из них используется.
if $webdriver #watir-webdriver
$browser.confirm(true) do
$browser.div(:id => 'credit_cards').link(:text =>'Delete').click
end
else #watir
$browser.div(:id => 'credit_cards').link(:text =>'Delete').click_no_wait
$browser.javascript_dialog.button('OK').click
end
Кстати, комментарий после «конца» в каждом из этих примеров? Это то, что вы получите, если назначите вывод из цикла переменной
confirm_message = browser.confirm(true) do
browser.link(:text => "Add Lasers").click
end
puts confirm_message
> "do you really want to put lasers on sharks?"