Selenium Webdriver - Как пропустить ожидание загрузки страницы после клика и продолжить - PullRequest
3 голосов
/ 04 марта 2011

У меня есть тест rspec с использованием веб-драйвера, который нажимает кнопку ... после нажатия кнопки страница никогда не загружается полностью (что является ожидаемым и правильным поведением).После нажатия кнопки я хочу подождать 2 секунды, а затем перейти к другому URL-адресу ... несмотря на то, что страница не загружена.Я не хочу выдавать ошибку, потому что страница не загрузилась, я хочу просто проигнорировать это и продолжить, как будто все хорошо.Страница никогда не должна загружаться, это ожидаемое и правильное поведение.

Как можно избежать ожидания до истечения времени ожидания, и, во-вторых, как я могу избежать ошибки, которая приводит к провалу теста.

Спасибо!

Ответы [ 4 ]

0 голосов
/ 28 апреля 2011

Отправьте ключ 'Enter' на соответствующую ссылку или кнопку вместо щелчка, веб-драйвер не будет ждать загрузки страницы и мгновенно вернется (это на C #, просто переведите на Ruby):

element.SendKeys (Key, Return);

0 голосов
/ 16 марта 2011

почему бы вам не попробовать простой прием использования wait () после waitForPageToLoad (), который заставляет его игнорировать предыдущую команду в Selenium и никогда не пропускает этот шаг

0 голосов
/ 25 апреля 2011

Что если вы использовали метод ожидания RSpec:

expect {
  Thread.new() {
    sleep(2)
    raise RuntimeError
  }
  theButton.click()
}.to raise_error
0 голосов
/ 07 марта 2011

WebDriver имеет блокирующий API, и он всегда будет ждать загрузки страницы. Вместо этого вы можете нажать кнопку с помощью JavaScript, то есть вызвать событие onclick. Я не знаком с Ruby, но в Java это будет:

WebDriver driver = ....; // Init WebDriver
WebElement button = ....; // Find your element for clicking
String script = "if (document.createEventObject){"+
      "return arguments[0].fireEvent('onclick');"+
  "}else{"+
    "var evt = arguments[0].ownerDocument.createEvent('MouseEvents');"+
    "evt.initMouseEvent('click',true,true,"+
    "element.ownerDocument.defaultView,1,0,0,0,0,false,"+
    "false,false,false,1,null);"+
  "return !element.dispatchEvent(evt);}" ;
((JavascriptExecutor)driver).executeScript(script, button);

После этого вы можете подождать 2 секунды и продолжить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...