Как использовать Watir:: Waiter:: wait_until, чтобы заставить Chrome ждать?
Я пытаюсь сказать моему watir script, чтобы подождать окно ввода, введенное в ajax, для открытия. Я использую watir-webdriver и тестирую в Chrome. Я не могу заставить wait_until
работать, как прокомментировано ниже (упрощенный) script.
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, я буквально только что выбрал это вчера, поэтому я почти ожидаю, что это станет результатом моей непростительности.
В случае, если это актуально, я работаю над mac (OSX v. 10.6.5).
Ответы
Ответ 1
Сделайте это сначала:
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
Вы также можете установить время ожидания с помощью 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
Ответ 3
Я столкнулся с той же проблемой несколько недель назад.
Дело в том, что Watir:: Wait.until {} ждет ТОЛЬКО для загрузки главной страницы (тестируется в основном на Firefox).
Если у вас есть код JavaScript, загружающий другие компоненты, их не ждут.
Итак, единственное решение - выбрать элемент и явно дождаться его появления (используя методы 2 и 3).