Обработка всплывающего окна JavaScript, возникающего при событии keyup - PullRequest
6 голосов
/ 17 ноября 2011

У меня есть текстовое поле на странице HTML, которое проверяет, ввели ли вы значение в диапазоне от 1 до 365. Если пользователь вводит недопустимое значение, например, не числовой символ, или значение, которое не попадает в диапазон,это показывает всплывающее окно.Я видел в watir wiki, что есть метод select_no_wait, который используется для закрытия всплывающих окон, когда вы выбираете недопустимое значение из списка.

Каков хороший способ обработки всплывающего окна, возникающего при событии keyup?Нужно ли продолжать в том же духе, как реализован метод select_no_wait, или мы можем запустить другой процесс, который отклонит всплывающие окна, которые могут возникнуть при вызове метода set.функция проверки в Javascript будет выглядеть так:

<html>
<head>
<script type="text/javascript">
var num = 0
function validate(e)
{
 var charPressed = String.fromCharCode(e.keyCode);
if(charPressed >= '0' && charPressed<= '9')
{
  num = parseInt(document.getElementById('foo').value);
   if ((document.getElementById('foo').value).length <= 3 && (num > 365 || num==0))
    alert ("Values can only be from to 1 to 365");
    }
  else
  {
  alert("Invalid character entered");
  document.getElementById('foo').value = "";
  }
}
</script>
</head>
<body>
<label id="code"> Sample </label>
<input type="text" id ="foo" onkeyup="validate(event)" maxLength="3"/>
</body>
</html>

Я был бы очень признателен за любые указания по этому вопросу.Заранее спасибо.

Ответы [ 2 ]

9 голосов
/ 17 ноября 2011

Для Ватира:

Существуют некоторые действия, которые в настоящее время ожидают загрузки страницы, например .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?"
0 голосов
/ 02 октября 2013

Я обнаружил, что перенос команды browser.javascript_dialog.button('OK').click в sleep(3) do помогает быстрым браузерам завершить выполнение команды.

...