Блог вебразработчика
  • ГЛАВНАЯ
  • ПОДПИСКА

Selenium Driver. Нажатие на элемент. Решение часто возникающих проблем

Июл19
2012
Написал Tatyana

Для того, чтобы выполнить клик по элементу в арсенале класса WebElement есть метод click().

WebElement element = driver.findElement(By.tagName("a"));
element.click();

Существуют определенные условия для элемента, по которому можно кликнуть: элемент должен быть виден и его ширина и высота должны быть больше 0. Если элемент скрыт за границей окна браузера, то Selenium автоматически проскроллит страницу, чтобы элемент стал видимым. И только после этого кликнет по нему. Если проскроллить страницу не получается (это может быть по разным причинам), то возникнет исключение MoveTargetOutOfBoundsException.

В случае, если нажатие на элемент вызывает загрузку новой страницы, то этот метод будет блокировать дальнейшее выполнение, пока страница не загрузится. После перезагрузки страницы любые операции над этим элементом приведут к возникновению StaleElementReferenceException. Если страница загружается с помощью AJAX, то метод не будет дожидаться ее загрузки, в этом случае нужно самостоятельно убедиться в том, что страница была загружена.

Предыдущие версии Selenium осуществляли клик в левый верхний угол элемента, начиная с версии 2.16 это было изменено, теперь клик выполняется в центр элемента. Бывают случаи, когда элемент виден лишь частично и клик в центр элемента может не срабатывать. Для того, чтобы кликнуть по указанным координатам можно использовать класс Actions, а конкретно его методы moveToElement(WebElement toElement, int xOffset, int yOffset) и click(). Подробнее про наведение курсора на элемент можно почитать в этой статье:

import org.openqa.selenium.interactions.Actions;

Actions actions = new Actions(driver);
actions.moveToElement(element, 1, 1).click()).build().perform();

Selenium сначала наведет курсор в заданную точку (в этом случае в левый верхний угол), а метод click(), выполненный без параметров, осуществит нажатие кнопки мыши в текущем положении курсора.
Для расчета смещения, например, координат правого нижнего угла, будет полезен метод getSize():

import org.openqa.selenium.Dimension;
import org.openqa.selenium.interactions.Actions;

Dimension size = element.getSize();
Actions actions = new Actions(driver);
actions.moveToElement(element, size.getWidth() - 1, size.getHeight() - 1)
                                               .click()).build().perform();

Некоторые веб-приложения переопределяют обработчик нажатия правой кнопки мыши для элементов, например, для вывода кастомного контекстное меню, вместо стандартного меню браузера. Работа с таким меню осуществляется точно также как и с другими элементами страницы — чаще это обычный элемент DOM, который изначально скрыт, или который создается с помощью javascript при нажатии правой кнопки. Для тестирования таких случаев нужно нажать правой кнопкой на элементе и дождаться появления меню, потому что обычно такие элементы загружаются не сразу. Для имитации нажатия правой кнопки мыши используется метод contextClick(WebElement onElement) класса Actions. Клик осуществляется в центр элемента:

import org.openqa.selenium.interactions.Actions;

Actions actions = new Actions(driver);
actions.contextClick(element).perform();

(new WebDriverWait(driver, 10))
          .until(ExpectedConditions
                    .visibilityOfElementLocated(By.id("menu-id")));

Иногда плагины на страницах скрывают элементы, создавая для них обвертки, перенаправляющие нажатия мыши. Бывает, что эти элементы появляются лишь по наведению курсора или при других условиях. И если сам плагин не представляет ценности для тестирования, а нужно лишь выполнить действие, тут и возникает проблема нажатия на невидимый элемент. При попытке кликнуть по скрытому элементу возникнет исключение ElementNotVisibleException. Selenium не взаимодействует с невидимыми элементами, т.е. выполнить нажатие на них нельзя. Но, как говорится, если очень хочется, то можно) Кликнуть по невидимому элементу можно с помощью javascript:

public void clickOnInvisibleElement(WebElement element) {
		
	String script = "var object = arguments[0];" 
		 	+ "var theEvent = document.createEvent(\"MouseEvent\");"
			+ "theEvent.initMouseEvent(\"click\", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);"
			+ "object.dispatchEvent(theEvent);"
			;
		
	((JavascriptExecutor)driver).executeScript(script, element);
}
  • Нравится
  • Tweet

Опубликовано в Selenium - Помечено Actions, Javascript, Selenium WebDriver
Рассказать всем Twitter Facebook Delicious StumbleUpon E-Mail
← Selenium Driver: видимость элементов
Selenium Driver Exceptions: StaleElementReferenceException →

Warning: count(): Parameter must be an array or an object that implements Countable in /var/www/u0420283/data/www/internetka.in.ua/wp-includes/class-wp-comment-query.php on line 405

4 комментариев

  1. Ksenia's Gravatar Ksenia
    13.02.2013 at 14:04 | Permalink

    Спасибо большое за статью!! Очень помогло))
    С помощью moveToElement увидеть свою кнопку не смогла, но javascript решил мою проблему %-)
    Спасибо)

  2. Дмитрий's Gravatar Дмитрий
    17.04.2013 at 10:46 | Permalink

    TATYANA, большое спасибо за ваш труд! Данная статья очень помогла (javascript).

  3. Ivan's Gravatar Ivan
    15.06.2014 at 08:00 | Permalink

    javascript — Очень помог!) Спасибо большое!

  4. Alex's Gravatar Alex
    02.02.2016 at 10:45 | Permalink

    помогло
    actions.moveToElement(element, 1, 1).build().perform();
    element.click();

Свежие записи

  • WebDriver и SSL Untrusted certificate
  • Видеозапись выполнения тестов Selenium
  • Selenium WebDriver: basic авторизация
  • BrowserMob Proxy + Selenium: автоматизация сбора данных о производительности
  • Hibernate 4: UserType пользовательский тип данных (часть 2)

Поиск

Рубрики

  • Hibernate ORM
  • SEO
  • Разное
  • Тестирование
    • JUnit
    • Selenium
    • Thucydides

Метки

Actions AJAX Alert AutoIt ChromeDriver Exceptions ExpectedConditions FindElement FirefoxDriver Hibernate InternetExplorerDriver Java Javascript Jenkins JUnit4 Maven PageFactory Page Object RemoteWebDriver Select Selenium IDE Selenium Server Selenium WebDriver switchTo Thucydides WebDriverWait XPath Автоматизированное тестирование база данных заработок в сети сеть Интернет скорость продвижения сайта статейное продвижение услуги продвижения

Реклама


Donec in mi a arcu cursus commodo non ut metus. Nunc id eros ut augue consequat tempus ut non ligula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer pretium, erat sit amet scelerisque euismod, purus lectus convallis dui, eget imperdiet sapien est ut magna. Nullam elementum, tortor vitae pulvinar mattis, orci neque porta tortor, a feugiat nisi lacus quis diam. Ut gravida augue id est rutrum elementum. Mauris eget felis dolor. Phasellus ante ante, porttitor sit amet lobortis ut, suscipit id neque. Fusce hendrerit dolor nec odio eleifend in auctor enim cursus. Nullam fermentum pretium risus, in hendrerit nulla cursus sit amet. Fusce eu tempus elit. Ut tortor velit, aliquam in ornare vel, feugiat sed nibh. Donec fringilla est id odio lacinia vulputate. Donec nulla urna, congue sit amet pretium non, dictum at orci. Fusce neque sem, fermentum eu tempus nec, mattis venenatis sem. Proin scelerisque velit tristique urna mattis adipiscing. Proin mattis faucibus facilisis. Integer non lacus ac ligula accumsan convallis quis molestie erat. Curabitur imperdiet vestibulum vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris lacus ligula, hendrerit eget suscipit in, sollicitudin nec dui. Suspendisse euismod, lorem pretium gravida rhoncus, enim quam facilisis orci, nec volutpat nisi dolor id lacus. Proin dolor arcu, rutrum eget hendrerit vel, pharetra id elit. Nullam porta euismod suscipit. Pellentesque malesuada consequat sem, et auctor magna aliquam gravida. Nullam blandit dignissim iaculis. Suspendisse non diam nec augue scelerisque iaculis. Nam id dui sed lorem vulputate rhoncus eget eu tellus. In sit amet nisi nunc. Fusce sed aliquet sem. Aliquam sit amet metus metus.
Donec in mi a arcu cursus commodo non ut metus. Nunc id eros ut augue consequat tempus ut non ligula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer pretium, erat sit amet scelerisque euismod, purus lectus convallis dui, eget imperdiet sapien est ut magna. Nullam elementum, tortor vitae pulvinar mattis, orci neque porta tortor, a feugiat nisi lacus quis diam. Ut gravida augue id est rutrum elementum. Mauris eget felis dolor. Phasellus ante ante, porttitor sit amet lobortis ut, suscipit id neque. Fusce hendrerit dolor nec odio eleifend in auctor enim cursus. Nullam fermentum pretium risus, in hendrerit nulla cursus sit amet. Fusce eu tempus elit. Ut tortor velit, aliquam in ornare vel, feugiat sed nibh. Donec fringilla est id odio lacinia vulputate. Donec nulla urna, congue sit amet pretium non, dictum at orci. Fusce neque sem, fermentum eu tempus nec, mattis venenatis sem. Proin scelerisque velit tristique urna mattis adipiscing. Proin mattis faucibus facilisis. Integer non lacus ac ligula accumsan convallis quis molestie erat. Curabitur imperdiet vestibulum vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris lacus ligula, hendrerit eget suscipit in, sollicitudin nec dui. Suspendisse euismod, lorem pretium gravida rhoncus, enim quam facilisis orci, nec volutpat nisi dolor id lacus. Proin dolor arcu, rutrum eget hendrerit vel, pharetra id elit. Nullam porta euismod suscipit. Pellentesque malesuada consequat sem, et auctor magna aliquam gravida. Nullam blandit dignissim iaculis. Suspendisse non diam nec augue scelerisque iaculis. Nam id dui sed lorem vulputate rhoncus eget eu tellus. In sit amet nisi nunc. Fusce sed aliquet sem. Aliquam sit amet metus metus.
Donec in mi a arcu cursus commodo non ut metus. Nunc id eros ut augue consequat tempus ut non ligula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer pretium, erat sit amet scelerisque euismod, purus lectus convallis dui, eget imperdiet sapien est ut magna. Nullam elementum, tortor vitae pulvinar mattis, orci neque porta tortor, a feugiat nisi lacus quis diam. Ut gravida augue id est rutrum elementum. Mauris eget felis dolor. Phasellus ante ante, porttitor sit amet lobortis ut, suscipit id neque. Fusce hendrerit dolor nec odio eleifend in auctor enim cursus. Nullam fermentum pretium risus, in hendrerit nulla cursus sit amet. Fusce eu tempus elit. Ut tortor velit, aliquam in ornare vel, feugiat sed nibh. Donec fringilla est id odio lacinia vulputate. Donec nulla urna, congue sit amet pretium non, dictum at orci. Fusce neque sem, fermentum eu tempus nec, mattis venenatis sem. Proin scelerisque velit tristique urna mattis adipiscing. Proin mattis faucibus facilisis. Integer non lacus ac ligula accumsan convallis quis molestie erat. Curabitur imperdiet vestibulum vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris lacus ligula, hendrerit eget suscipit in, sollicitudin nec dui. Suspendisse euismod, lorem pretium gravida rhoncus, enim quam facilisis orci, nec volutpat nisi dolor id lacus. Proin dolor arcu, rutrum eget hendrerit vel, pharetra id elit. Nullam porta euismod suscipit. Pellentesque malesuada consequat sem, et auctor magna aliquam gravida. Nullam blandit dignissim iaculis. Suspendisse non diam nec augue scelerisque iaculis. Nam id dui sed lorem vulputate rhoncus eget eu tellus. In sit amet nisi nunc. Fusce sed aliquet sem. Aliquam sit amet metus metus.
Donec in mi a arcu cursus commodo non ut metus. Nunc id eros ut augue consequat tempus ut non ligula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer pretium, erat sit amet scelerisque euismod, purus lectus convallis dui, eget imperdiet sapien est ut magna. Nullam elementum, tortor vitae pulvinar mattis, orci neque porta tortor, a feugiat nisi lacus quis diam. Ut gravida augue id est rutrum elementum. Mauris eget felis dolor. Phasellus ante ante, porttitor sit amet lobortis ut, suscipit id neque. Fusce hendrerit dolor nec odio eleifend in auctor enim cursus. Nullam fermentum pretium risus, in hendrerit nulla cursus sit amet. Fusce eu tempus elit. Ut tortor velit, aliquam in ornare vel, feugiat sed nibh. Donec fringilla est id odio lacinia vulputate. Donec nulla urna, congue sit amet pretium non, dictum at orci. Fusce neque sem, fermentum eu tempus nec, mattis venenatis sem. Proin scelerisque velit tristique urna mattis adipiscing. Proin mattis faucibus facilisis. Integer non lacus ac ligula accumsan convallis quis molestie erat. Curabitur imperdiet vestibulum vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris lacus ligula, hendrerit eget suscipit in, sollicitudin nec dui. Suspendisse euismod, lorem pretium gravida rhoncus, enim quam facilisis orci, nec volutpat nisi dolor id lacus. Proin dolor arcu, rutrum eget hendrerit vel, pharetra id elit. Nullam porta euismod suscipit. Pellentesque malesuada consequat sem, et auctor magna aliquam gravida. Nullam blandit dignissim iaculis. Suspendisse non diam nec augue scelerisque iaculis. Nam id dui sed lorem vulputate rhoncus eget eu tellus. In sit amet nisi nunc. Fusce sed aliquet sem. Aliquam sit amet metus metus.

Блог вебразработчика
Функциональное тестирование и продвижение сайтов

Яндекс.Метрика