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

Программирование на Python для тестировщиков
онлайн, начало 18 октября
Логи как инструмент тестировщика
онлайн, начало 21 октября
Тестирование REST API
онлайн, начало 21 октября
Организация автоматизированного тестирования
онлайн, начало 18 октября
Фотография

Не находится элемент для события click().


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

#1 Allexs

Allexs

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

  • Members
  • Pip
  • 11 сообщений
  • ФИО:Сергеев Алексей Юрьевич


Отправлено 11 Апрель 2016 - 13:15

Код:

var waitmis = new WebDriverWait(Driver, TimeSpan.FromSeconds(300000));

            waitmis.Until(ExpectedConditions.ElementExists(By.XPath("//html/body/div[1]/div[1]/ul/li[1]/ul/li[2]/a")));
            var search = Driver.FindElement(By.XPath("//html/body/div[1]/div[1]/ul/li[1]/ul/li[2]/a"));
            search.Click();
 
На Click() сразу вылетает ошибка: element not visible
  (Session info: chrome=49.0.2623.110)
  (Driver info: chromedriver=2.21.371459 (36d3d07f660ff2bc1bf28a75d1cdabed0983e7c4),platform=Windows NT 6.1 SP1 x86_64)

  • 0

#2 aid

aid

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

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


Отправлено 11 Апрель 2016 - 13:18

Нужно ожидание


  • 0

#3 Allexs

Allexs

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

  • Members
  • Pip
  • 11 сообщений
  • ФИО:Сергеев Алексей Юрьевич


Отправлено 11 Апрель 2016 - 13:58

ожидание установлено в первой строке кода


  • 0

#4 aid

aid

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

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


Отправлено 11 Апрель 2016 - 14:13

не то ожидаете, следовательно, я и написал, что нужно ожидание.


  • 0

#5 TatyanaV

TatyanaV

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

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 12 Апрель 2016 - 09:33

Вы ждете просто появления элемента. И элемент у вас находится, но он не видимый, поэтому и клик не выходит.
Ожидайте пока элемент станет видимым кликабельным (это не тоже самое, что и ElementExists).

(спс за поправку)


  • 0

#6 aid

aid

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

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


Отправлено 12 Апрель 2016 - 09:44

Вы ждете просто появления элемента. И элемент у вас находится, но он не видимый, поэтому и клик не выходит.
Ожидайте пока элемент станет видимым (это не тоже самое, что и ElementExists).

 

Кликабельным


  • 0

#7 TatyanaV

TatyanaV

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

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 12 Апрель 2016 - 09:47

Вы ждете просто появления элемента. И элемент у вас находится, но он не видимый, поэтому и клик не выходит.
Ожидайте пока элемент станет видимым (это не тоже самое, что и ElementExists).

 
Кликабельным

Да, Вы правы, обычно и ищут именно кликабельные.
  • 0

#8 elvis

elvis

    Постоянный участник

  • Members
  • PipPipPip
  • 189 сообщений
  • Город:Tallinn


Отправлено 12 Апрель 2016 - 12:03

Селениум не всегда способен определить готов ли элемент для клика.


  • 0

#9 Allexs

Allexs

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

  • Members
  • Pip
  • 11 сообщений
  • ФИО:Сергеев Алексей Юрьевич


Отправлено 13 Апрель 2016 - 09:23

А с помощью чего это можно сделать?


  • 0

#10 elvis

elvis

    Постоянный участник

  • Members
  • PipPipPip
  • 189 сообщений
  • Город:Tallinn


Отправлено 14 Апрель 2016 - 07:59

А с помощью чего это можно сделать?

По косвенным признакам определять закончилась ли загрузка страницы и отработали ли необходимые скрипты. Узнать у разработчика, чего конкретно ждёт кнопка.


  • 0

#11 gurkini

gurkini

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

  • Members
  • Pip
  • 5 сообщений
  • ФИО:Гуркин Иван

Отправлено 26 Май 2016 - 11:14

Никаких косвенных признаков не надо:
 
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutSeconds));
wait.Until(ExpectedConditions.ElementToBeClickable(by));

  • 0

#12 elvis

elvis

    Постоянный участник

  • Members
  • PipPipPip
  • 189 сообщений
  • Город:Tallinn


Отправлено 27 Май 2016 - 08:34

 

Никаких косвенных признаков не надо:
 
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutSeconds));
wait.Until(ExpectedConditions.ElementToBeClickable(by));

 

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


  • 0

#13 gurkini

gurkini

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

  • Members
  • Pip
  • 5 сообщений
  • ФИО:Гуркин Иван

Отправлено 27 Май 2016 - 13:51

 

 

Никаких косвенных признаков не надо:
 
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutSeconds));
wait.Until(ExpectedConditions.ElementToBeClickable(by));

 

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

 

Полностью согласен, поведение webdriver, как и IDE часто не предсказуемо.
Но для простых случаев, например когда кнопка скрыта каким-либо div-ом данное решение подойдет.


  • 0

#14 DennisM

DennisM

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

  • Members
  • Pip
  • 55 сообщений
  • ФИО:Dennis M
  • Город:Ralegh NC, USA

Отправлено 27 Май 2016 - 16:08

 

Код:

 

            waitmis.Until(ExpectedConditions.ElementExists(By.XPath("//html/body/div[1]/div[1]/ul/li[1]/ul/li[2]/a")));
            var search = Driver.FindElement(By.XPath("//html/body/div[1]/div[1]/ul/li[1]/ul/li[2]/a"));
 

 

 

За такие XPath нужно линейкой по пальцам бить!


  • 2


Selenium 2.0: стартовый уровень
онлайн
Программирование на Java для тестировщиков
онлайн
Автоматизация функционального тестирования
онлайн
Selenium WebDriver: полное руководство
онлайн



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

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

Яндекс.Метрика
Реклама на портале