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

Фотография

Не находится элемент для события 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


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

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