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

Практикум по тест-дизайну 2.0
онлайн, начало 29 ноября
Тестирование REST API
онлайн, начало 18 ноября
Автоматизатор мобильных приложений
онлайн, начало 27 ноября
Selenium WebDriver: полное руководство
онлайн, начало 15 ноября
Фотография

Поиск элемента

python selenium webdriver

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

#1 andreykou

andreykou

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

  • Members
  • Pip
  • 39 сообщений
  • ФИО:Андрей Куриленко

Отправлено 23 Август 2016 - 14:15

Привет всем,

 

Как можно добраться до элемента, если такая ситуация:

 

<li class="dropdown">
 

      <a href="/logout">

 

               <i class="fa fa-sign-out"></i>
         Выход
       </a>
</li>
 
Мне нужно нажать на кнопку выход
 
Спасибо всем за ответы!

  • 0

#2 Lzk

Lzk

    Специалист

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

Отправлено 23 Август 2016 - 14:26

//a[text()='Выход']
//li[@class='dropdown']/a
//a[@href='/logout']

  • 1

#3 andreykou

andreykou

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

  • Members
  • Pip
  • 39 сообщений
  • ФИО:Андрей Куриленко

Отправлено 23 Август 2016 - 14:34

//a[text()='Выход']
//li[@class='dropdown']/a
//a[@href='/logout']

Ошибку кидает:

 

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: {"method":"xpath","selector":"//a[@href='/logout']"}
Stacktrace:
    at FirefoxDriver.prototype.findElementInternal_ (file:///tmp/tmp4Ps6lb/extensions/fxdriver@googlecode.com/components/driver-component.js:10770)
    at FirefoxDriver.prototype.findElement (file:///tmp/tmp4Ps6lb/extensions/fxdriver@googlecode.com/components/driver-component.js:10779)
    at DelayedCommand.prototype.executeInternal_/h (file:///tmp/tmp4Ps6lb/extensions/fxdriver@googlecode.com/components/command-processor.js:12661)
    at DelayedCommand.prototype.executeInternal_ (file:///tmp/tmp4Ps6lb/extensions/fxdriver@googlecode.com/components/command-processor.js:12666)
    at DelayedCommand.prototype.execute/< (file:///tmp/tmp4Ps6lb/extensions/fxdriver@googlecode.com/components/command-processor.js:12608)

  • 0

#4 Freiman

Freiman

    Гуру

  • Members
  • PipPipPipPipPipPip
  • 1 452 сообщений
  • ФИО:Андрей Адеркин
  • Город:Йошкар-Ола

Отправлено 23 Август 2016 - 15:05

Есть подозрение, что там какое-то выпадающее меню, и сначала надо кликнуть на элемент верхнего уровня, чтобы его раскрыть, а потом на "Выход".
  • 0

#5 andreykou

andreykou

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

  • Members
  • Pip
  • 39 сообщений
  • ФИО:Андрей Куриленко

Отправлено 23 Август 2016 - 17:56

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


Да вроде нет. Когда захожу на страницу меню не выподает.
  • 0

#6 elvis

elvis

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

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


Отправлено 23 Август 2016 - 20:47

приведите больший кусок кода. элемент li там явно не один?


  • 0

#7 andreykou

andreykou

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

  • Members
  • Pip
  • 39 сообщений
  • ФИО:Андрей Куриленко

Отправлено 24 Август 2016 - 03:16

приведите больший кусок кода. элемент li там явно не один?


Ни один.
  • 0

#8 serjb9

serjb9

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

  • Members
  • Pip
  • 68 сообщений

Отправлено 24 Август 2016 - 05:08

а так?

//li[@class='dropdown']/a[@href='/logout']

  • 1

#9 andreykou

andreykou

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

  • Members
  • Pip
  • 39 сообщений
  • ФИО:Андрей Куриленко

Отправлено 24 Август 2016 - 05:24

 

а так?

//li[@class='dropdown']/a[@href='/logout']

Работает...:)

Спасибо за помощь!!!!

Так я понимаю, что нужно указать полный путь?

Даже если он закрыт в блок div?


  • 0

#10 serjb9

serjb9

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

  • Members
  • Pip
  • 68 сообщений

Отправлено 24 Август 2016 - 06:54

Если один элемент на странице - то можно было просто по дереву с помощью / спустится, как подсказал Lzk.

У вас скорее всего более 1 элемента со схожей структурой, которые были найдены по локатору "//li[@class='dropdown']/a".

Поэтому мы указали более точный путь, с конкретной ссылкой.


  • 1

#11 andreykou

andreykou

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

  • Members
  • Pip
  • 39 сообщений
  • ФИО:Андрей Куриленко

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

Если один элемент на странице - то можно было просто по дереву с помощью / спустится, как подсказал Lzk.

У вас скорее всего более 1 элемента со схожей структурой, которые были найдены по локатору "//li[@class='dropdown']/a".

Поэтому мы указали более точный путь, с конкретной ссылкой.

 

Есть какие-нибудь программы, которые могут найти элемент быстро и указать его путь?

Кроме firebug.


  • 0

#12 serjb9

serjb9

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

  • Members
  • Pip
  • 68 сообщений

Отправлено 24 Август 2016 - 07:33

 

Есть какие-нибудь программы, которые могут найти элемент быстро и указать его путь?

Кроме firebug.

 

Сначала разберитесь самостоятельно в xpath.

В качестве вспомогательного плагина, можно поюзать Webdriver Element Locator для FF, но он не всегда сможет однозначно идентифицировать локатор.


  • 1

#13 andreykou

andreykou

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

  • Members
  • Pip
  • 39 сообщений
  • ФИО:Андрей Куриленко

Отправлено 24 Август 2016 - 08:22

 

 

Есть какие-нибудь программы, которые могут найти элемент быстро и указать его путь?

Кроме firebug.

 

Сначала разберитесь самостоятельно в xpath.

В качестве вспомогательного плагина, можно поюзать Webdriver Element Locator для FF, но он не всегда сможет однозначно идентифицировать локатор.

 

 А как я могу применить функцию decode() в таком случаи?

 

driver.find_element_by_xpath("//span[contains(.,'форум')]")


  • 0

#14 Lzk

Lzk

    Специалист

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

Отправлено 24 Август 2016 - 08:29

 а для чего тебе это ?

a = "форум";
driver.find_element_by_xpath("//span[contains('" + a.decode() + "')]")

попробуй вот так , если используешь Python

el = u"//span[contains('форум')]";
driver.find_element_by_xpath(el)

  • 1

#15 andreykou

andreykou

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

  • Members
  • Pip
  • 39 сообщений
  • ФИО:Андрей Куриленко

Отправлено 24 Август 2016 - 08:40

 

 а для чего тебе это ?

a = "форум";
driver.find_element_by_xpath("//span[contains('" + a.decode() + "')]")

попробуй вот так , если используешь Python

el = u"//span[contains('форум')]";
driver.find_element_by_xpath(el)

Ошибку дает

 

SyntaxError: Non-ASCII character '\xd0'


  • 0

#16 Lzk

Lzk

    Специалист

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

Отправлено 24 Август 2016 - 09:34

SyntaxError: Non-ASCII character '\xd0'

 

 

в начало файла добавь

 

# coding=utf-8


  • 0

#17 andreykou

andreykou

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

  • Members
  • Pip
  • 39 сообщений
  • ФИО:Андрей Куриленко

Отправлено 24 Август 2016 - 09:41

 

SyntaxError: Non-ASCII character '\xd0'

 

 

в начало файла добавь

 

# coding=utf-8

 

 

Работает спасибо большое!


  • 0


Программирование на С# для тестировщиков
онлайн
Автоматизатор мобильных приложений
онлайн
Selenium WebDriver: полное руководство
онлайн
Программирование на Python для тестировщиков
онлайн




Темы с аналогичным тегами python, selenium, webdriver

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

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

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