3. Это курс уровня 300
Я предполагаю,
что вы:
понимаете, что
WebDriver это не
Selenium RC :)
в целом знаете
интерфейс
WebDriver
хорошо знаете,
что такое DOM
немного знаете
JavaScript
8. Завершение загрузки страницы
FF, Chrome, IE, Opera – загрузка синхронная
завершение определяется «автоматически»
selenium.waitForPageLoad(" 30000 ");
– не работает, если есть long poll или типа того
9. Завершение загрузки страницы
FF – режим асинхронной загрузки
FirefoxProfile fp = new FirefoxProfile();
fp.setPreference("webdriver.load.strategy", "unstable");
// до версии 2.19 было "fast"
HtmlUnit
client.setRefreshHandler(new WaitingRefreshHandler());
20. Состояния элемента
Отсутствует (не найден)
Есть, но невидимый
Есть, видимый, но не Есть, видимый, можно
interactable выполнять действия
Был, но удалён из DOM
21. Видимость элемента
bot.dom.isShown = function(elem, opt_ignoreOpacity) {
// Title elements are shown if and only if they belong to the bot window.
// Option or optgroup is shown iff enclosing select is shown.
// Map is shown iff image that uses it is shown.
// Area is shown iff enclosing map is shown.
// Any hidden input is not shown.
// Any element with hidden visibility is not shown.
// Any element with a display style equal to 'none' or that has an ancestor
// with display style equal to 'none' is not shown.
// Any transparent element is not shown.
// Any element without positive size dimensions is not shown.
// Zero-sized elements should still be considered to have positive size
// if they have a child element or text node with positive size.
22. Имплицитные ожидания
driver.manage().timeouts()
.implicitlyWait(10, TimeUnit.SECONDS);
dialog = driver.findElement(By.id("dialog-confirm-delete"));
методы поиска становятся синхронными
findElements ищет хотя бы один элемент
ожидание – на стороне браузера
23. Когда это не работает
надо просто проверить наличие элемента
надо найти один (любой) элемент из двух
ожидание исчезновения элемента
24. Эксплицитные ожидания
WebDriverWait + ExpectedCondition
new WebDriverWait(driver, 30).until(
presenceOfElementLocated(By.id("dialog-confirm-delete")));
public static ExpectedCondition<WebElement>
presenceOfElementLocated(final By locator)
{
return new ExpectedCondition<WebElement>() {
public WebElement apply(WebDriver driver) {
return findElement(locator, driver);
}
};
}
32. Альтернатива: автоперехват
любое действие может завершиться с
UnhandledAlertException
зато больше нет «вечной блокировки»
на неожиданных алертах
34. Ожидание
открытия окна
Нет готового
ExpectedCondition
Почему?
Потому что его
нельзя сделать
Надо сначала
запомнить
driver.getWindowHandles()
потом кликнуть
а потом ждать,
когда изменится
список окон
35. Ещё немного про окна
Не переключайтесь слишком быстро!
http://code.google.com/p/selenium/issues/detail?id=2764
36. Ещё немного про окна
Не забудьте переключиться обратно
после закрытия окна
39. Действия «с JavaScript’ом»
клавиатурные
сочетания
ввести текст
«п о с т е п е н н о»
правая кнопка мыши
перетаскивание
наведение мыши
двойной клик
42. «Сахар», впрочем, не мешает
clear для полей ввода
submit для любого элемента формы
Пользователь не
может этого
сделать!!!
43. «Сахар», впрочем, не мешает
new Select(selectElement)
selectByText(text) – с нормализацией пробелов
selectByValue(value)
44. click: подробности
На что можно кликнуть?
Невидимые элементы: как по ним кликать?
Какие обработчики сработают?
клик поднимается вверх по DOM’у
по крайней мере должен
Координаты клика?
левый верхний угол?
центр?
46. sendKeys: подробности
Где можно
нажимать клавиши?
Как заполнить
невидимое поле?
Какие обработчики
сработают?
поднимаются вверх
по DOM’у
по крайней мере
должны