Как использовать Watir :: Waiter :: wait_until, чтобы заставить Chrome ждать? - PullRequest
15 голосов
/ 05 декабря 2010

Я пытаюсь сказать моему сценарию watir, чтобы он ждал, пока откроется окно входа с помощью ajax-инъекции.Я использую watir-webdriver и тестирую в Chrome.Я не могу заставить работать wait_until, как прокомментировано в приведенном ниже (упрощенном) скрипте.

require "rubygems"
require "watir-webdriver"
b = Watir::Browser.new(:chrome)
site = "www.example.com"
b.goto site

puts "Click on Sign In button"
b.link(:id, 'btnLogin').click

puts "Waiting for the username/password dialog to show up"

# Below line does *not* work
# Throws this error: "uninitialized constant Watir::Waiter (NameError)" 
Watir::Waiter::wait_until { b.text_field(:id, 'username').exists? }

# Below line does *not* work
# Throws this error: "undefined method `wait_until' for main:Object (NoMethodError)" 
wait_until { b.text_field(:id, 'username').exists? }

# Below line *does* work, but I don't want to use it.
sleep 1 until b.text_field(:id, 'username').exists?

Является ли Watir::Waiter классом только для IE?Или что я делаю не так, sleep 1 метод ожидания работает просто отлично.Я новичок в Ruby и Watir, я буквально только что поднял это вчера, поэтому я наполовину ожидаю, что это будет результатом моего noobacityness.

В случае, если это уместно, я работаю на Mac (OSXv. 10.6.5).

Ответы [ 3 ]

26 голосов
/ 05 декабря 2010

Сделайте это сначала:

require "watir-webdriver/wait"

Затем попробуйте это:

1

Watir::Wait.until { ... }

2

browser.text_field(:id => 'username').when_present.set("name")

3

browser.text_field(:id => 'username').wait_until_present

Обратите внимание, что «присутствует» здесь означает «элемент существует и является видимым».

2 голосов
/ 08 октября 2013

Вы также можете установить таймаут с browser.it будет ждать его 700 секунд, как это.

client = Selenium::WebDriver::Remote::Http::Default.new
client.timeout = 700 # seconds � default is 60 second
ie=Watir::Browser.new:firefox, :http_client => client
1 голос
/ 24 июня 2013

Я столкнулся с той же проблемой несколько недель назад. Дело в том, что Watir :: Wait.until {} ожидает ТОЛЬКО загрузки главной страницы (тестируется в основном на Firefox). Если у вас есть какой-то код JavaScript, загружающий другие компоненты, они не ожидаются.

Таким образом, единственное решение состоит в том, чтобы выбрать и элемент и явно ожидать его появления (используя методы 2 и 3).

...