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

Фотография

помогите найти элемент на схеме и кликнуть по нему


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

#1 Darksol89

Darksol89

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

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Иван
  • Город:Санкт-Петербург


Отправлено 02 августа 2016 - 10:16

Всем доброго дня!

 

Имеется электрическая схема на веб-сайте, на ней расположены кликабельные компоненты. Требуется найти нужный компонент и кликнуть по нему.

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

 

Вот данные по компоненту, из консоли Мозиллы:

<div id="clickablearea43" class="item lable clickableAreaElement areaForID818" onmouseout="OnLandMarkOut();" onmouseover="OnLandMarkOver(this);" onclick="AreaClicked(event, '5','2', 'TOPSwitch-JX');" onscroll="AreaDefault(event, 'TOPSwitch-JX');" style="width: 106px; height: 99px; transform-origin: 0px 0px 0px; display: block; z-index: 2; opacity: 1; transform: translate(392.492px, 150.074px) scale(0.209016);" data-bg-color="" data-position="158,718" varindex="-1" varid="818" frozen="true" invt="2" family="TOPSwitch-JX"> </div>

 

Вопрос в следующем, можно ли как то заставить Селениум кликнуть по этому элементу, может быть можно как то задать начало айдишника, без цифр? Либо прокликивать по очереди все компоненты?

код нужен на Пайтоне, но можно и на другом языке, попробую разобраться в нем.


  • 0

#2 Vad1m198

Vad1m198

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

  • Members
  • PipPip
  • 115 сообщений
  • ФИО:Вадим


Отправлено 02 августа 2016 - 10:27

задать начало ИД можно с помощью xpath starts-with ф-ции 

http://www.abodeqa.c...ction-in-xpath/


  • 0

#3 Darksol89

Darksol89

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

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Иван
  • Город:Санкт-Петербург


Отправлено 02 августа 2016 - 10:53

Что не получается через данный способ .клик все равно не проходит.

Пишу так, driver.find_element(By.XPATH,("//contains[starts-with(@id='clickablearea')]")).click()

пробовал и @id, 'clickablearea' - бесполезно


  • 0

#4 Vad1m198

Vad1m198

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

  • Members
  • PipPip
  • 115 сообщений
  • ФИО:Вадим


Отправлено 02 августа 2016 - 11:20

Попробуйте так //div[starts-with(@id,’clickablearea’)]

И помните, что клик произойдет по первому найденому елементу.

Используйте FirePath для проверки локаторов в Firefox


  • 0

#5 Darksol89

Darksol89

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

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Иван
  • Город:Санкт-Петербург


Отправлено 02 августа 2016 - 12:04

Спасибо за совет, про FirePath, совсем забыл про него.

Имею вот такой вид driver.find_element(By.XPATH, "//div[starts-with(@id,'clickablearea')]").click()

Но клик все равно не проходит((


  • 0

#6 TatyanaV

TatyanaV

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

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


Отправлено 02 августа 2016 - 12:07

Можно и через css: div[id*='clickablearea’] или div[class=*'item lable clickableAreaElement'].

Вот только не ясно, как отличаются элементы в коде. Если только цифрой в айдишнике - печаль печальная, ибо сам селениум вам их никак не отличит.

Придется искать закономерности и подбирать id.

Если все же есть другие различия - я их не вижу, к сожалению, т.к. есть только один элемент в приведенном коде.

 

п.с.: элементы эти не в отдельном фрейме случайно? Если да - надо сначала в нужный фрейм переключиться.

 

п.п.с.: и что значит "не проходит"?  Куча причин может быть. Какую-то ошибку же пишет?


  • 0

#7 Darksol89

Darksol89

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

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Иван
  • Город:Санкт-Петербург


Отправлено 02 августа 2016 - 12:22

Фрэймов нет, однако похоже задача решена. 

 

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

вот такая строчка кода: driver.find_element(By.XPATH, "//div[@class='item lable clickableAreaElement areaForID818']").click()

больше не вызывает ошибку и клик происходит.

 

Всем спасибо за подсказки и помощь!


  • 0

#8 elvis

elvis

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

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


Отправлено 04 августа 2016 - 08:43

это не есть хороший xpath. Как только добавится или уберётся один из классов (а такое в процессе разработки рано или поздно в любом случае произойдёт) ваш тест станет падать. Ищите лучше по By.CLASS_NAME и название одного класса а не все классы в куче (например только areaForID818). Предполагая, что такой элемент всего лишь один на странице, это должно сработать. Если это не так, то нужно искать список таких элементов через find_elements и выбирать нужный вам элемент по другим свойствам. 


  • 0


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

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