2012-02-09 5 views
2

Первая неделя с тестированием веб-браузера и веб-приложений в целом, поэтому все еще пытаюсь обернуть некоторые концепции.watir-webdriver - нажатие кнопки Javascript

Имея этот яваскрипт элемента:

<input type="submit" class="button" value="Search" name="_target0"> 

browser.button(:value, "Search").exists? 
=> "true" 

browser.button(:value, "Pesquisar").present? 
=> true 

browser.button(:name, "_target0").value 
=> "Search" 

Это на самом деле не ездить на кнопку, чтобы получить щелкнула,

browser.button(:name, "_target0").click 

Так что я получил ведомый Firefox, нажав на кнопку с помощью либо

browser.button(:name, "_target0").fire_event('on_click') 
browser.button(:name, "_target0").when_present.click 

но каковы различия между ними?

+1

«Это не работает» не говорит нам многого. Чего вы ожидали? Что произойдет, если вы попробуете 'browser.button.present?' –

+0

Спасибо Željko. Попытался лучше сформулировать вопрос в соответствии с вашими предложениями. Но мой единственный вопрос заключается в различии между использованием .fire_event ('on_click'), чтобы определить действие javascript, которое примет событие vs.when_present –

ответ

2

Что касается различий между ними:

  • .click = имитирует щелчок левой кнопкой мыши на объекте.
  • .fire_event = выполняет javascript, даже если он доступен или не доступен обычно с помощью мыши.
  • when_present.click = ожидает, что объект будет доступен и доступен в видимой области (полный браузер ) перед тем, как он попытается щелкнуть.

when_present полезен, когда ваш сайт использует AJAX, а взаимодействие с одним объектом приводит к появлению другого объекта. Использование .click может попытаться щелкнуть второй объект до его доступности, и сценарий завершится с ошибкой.

Вполне вероятно, что ваша страница содержит форму AJAX, и кнопку вы пытаетесь взаимодействовать с не загружается сразу, но после короткой задержки, когда:

  • текстовое поле вводится
  • другая кнопка нажата
  • страницы заканчивает генерации контента
  • и т.д.

С fire_eve nt не ищет физическое представление кнопки, а скорее JS-событие в источнике, оно может использоваться до того, как кнопка присутствует/видима/действительна.

+0

А, я вижу, спасибо Адаму. Ожидается ли, что browser.button (: значение, «Поиск») существует? и browser.button (: значение, «Пескарь»). return true, хотя кнопка все еще недоступна? –

+1

Если существует? возвращает true, кнопка находится в DOM. Если имеется? возвращает true, кнопка доступна и доступна. В этом случае щелчок должен работать, но я столкнулся с проблемой, когда кнопка все еще недоступна. Я решил эту проблему с помощью DIV, в котором содержалась кнопка в моем локаторе. Я не могу объяснить, почему, но доступ к кнопке в этом конкретном ключе разрешил мне проблему: browser.div (: name, /testing/).button(:value, «Поиск»). Нажмите –

+0

Любопытный Жоао - сделал это подход в комментарии (с использованием div) работает для вас? Или вы продолжили с одним из предыдущих решений? –

1

Можете ли вы проверить уровень масштабирования браузера, в котором выполняется ваш тест?

Я столкнулся с одной и той же проблемой с методом щелчка, но мне удалось «исправить» его, установив уровень масштабирования моего браузера (IE9) на 100%.

Обратите внимание, что требования к требованиям Selenium Webdriver для Internet Explorer указывают, что это требование для работы Native Events. см. here

+0

Использовал Firefox. Спасибо, в любом случае. –

Смежные вопросы