Перейти к содержимому

Фотография

Selenium - проверка удаления элемента

Selenium WebDriver

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 11

#1 aid

aid

    Опытный участник

  • Members
  • PipPipPipPip
  • 448 сообщений
  • ФИО:Николай


Отправлено 09 апреля 2015 - 07:47

Добрый день. Использую для создания теста Selenium Webdriver + Java. При улучшении созданного теста столкнулся с проблемой проверки удаления блоков на вебформе. Как можно реализовать данный функционал?


  • 0

#2 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 833 сообщений


Отправлено 09 апреля 2015 - 08:12

/**
* Проверяет что элемент не найден
*
* @param path css
*/
public void checkThatElementNotPresent(String path){
try {
if (driver.findElement(By.cssSelector(path)).isDisplayed()) {
throw new UnsupportedOperationException("Элемент [" + path + "] найден");
}
} catch (NoSuchElementException e) {
logger.info("Элемент не найден");
}
}

  • 1

#3 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 09 апреля 2015 - 08:23

а так не сработает разве ?

if !(driver.findElement(By.cssSelector(path)).isDisplayed()) {

 logger.info("Элемент не найден");

}

  • 0

#4 aksas

aksas

    Активный участник

  • Members
  • PipPip
  • 130 сообщений
  • Город:Харьков

Отправлено 09 апреля 2015 - 08:44

нет, если элемента нет в DOM то поиск вернет исключение


  • 0

#5 aksas

aksas

    Активный участник

  • Members
  • PipPip
  • 130 сообщений
  • Город:Харьков

Отправлено 09 апреля 2015 - 08:53

посмотрите как в коде вебдрайвера сделано https://code.google....Conditions.java

 

те для вас както так должно быть

public void isInvisible(By locator){
        try {
          return !(driver.findElement(locator).isDisplayed());
        } catch (NoSuchElementException e) {
          // Returns true because the element is not present in DOM. The
          // try block checks if the element is present but is invisible.
          return true;
        } catch (StaleElementReferenceException e) {
          // Returns true because stale element reference implies that element
          // is no longer visible.
          return true;
        }
}

  • 2

#6 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 09 апреля 2015 - 08:54

да , сорри , мы писали отдельную функцию

checkIfElementExists

которая возвращает либо true либо false


  • 0

#7 aid

aid

    Опытный участник

  • Members
  • PipPipPipPip
  • 448 сообщений
  • ФИО:Николай


Отправлено 09 апреля 2015 - 10:01

Благодарю за пример, я его под свои нужды изменю.


  • 0

#8 appmen

appmen

    Опытный участник

  • Members
  • PipPipPipPip
  • 408 сообщений
  • ФИО:Victor

Отправлено 10 апреля 2015 - 12:05

а почему бы не проверять через driver.findElements(...).size()? Если размер равен нулю - нет элемента. Если не равен, то проверяем отображается ли.


  • 0

#9 aid

aid

    Опытный участник

  • Members
  • PipPipPipPip
  • 448 сообщений
  • ФИО:Николай


Отправлено 10 апреля 2015 - 19:04

а почему бы не проверять через driver.findElements(...).size()? Если размер равен нулю - нет элемента. Если не равен, то проверяем отображается ли.

 

Не очень понятно "Если не равен, то проверяем отображается ли", выходит 2 условия так? А зачем? Там очень обширный проект, элементов более чем, код дико разросшийся, я пытаюсь его оптимизировать.


  • 0

#10 mazik7

mazik7

    Новый участник

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мазик
  • Город:Красноярск

Отправлено 11 апреля 2015 - 04:02

а почему бы не проверять через driver.findElements(...).size()? Если размер равен нулю - нет элемента. Если не равен, то проверяем отображается ли.

Проверка элемента через size чревата долгим ожиданием в случае если этот самый размер коллекции равен нулю. На сколько я понимаю в селениум есть таймаут на действие, так вот - если size > 0, то действие пройдет гораздо быстрее, иначе попытки поиска будут продолжаться в течении всего таймаута.


  • 0

:smile:


#11 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 894 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 13 апреля 2015 - 08:31



очень обширный проект, элементов более чем, код дико разросшийся, я пытаюсь его оптимизировать.

 

Можно ещё так оптимизировать пример aksas

Начиная с Java 1.7

	public boolean isInvisible(By locator) {
		try {
			return !(driver.findElement(locator).isDisplayed());

		} catch (NoSuchElementException | StaleElementReferenceException e) {

			return true;
		}

	}

  • 0

#12 aid

aid

    Опытный участник

  • Members
  • PipPipPipPip
  • 448 сообщений
  • ФИО:Николай


Отправлено 14 апреля 2015 - 11:12

 



очень обширный проект, элементов более чем, код дико разросшийся, я пытаюсь его оптимизировать.

 

Можно ещё так оптимизировать пример aksas

Начиная с Java 1.7

	public boolean isInvisible(By locator) {
		try {
			return !(driver.findElement(locator).isDisplayed());

		} catch (NoSuchElementException | StaleElementReferenceException e) {

			return true;
		}

	}

 

Ранее такой пример приводили, но всё равно спасибо.


  • 0



Темы с аналогичным тегами Selenium WebDriver

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных