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

Автоматизатор мобильных приложений
онлайн, начало 19 мая
Первый Онлайн ИНститут Тестировщиков
онлайн, начало 18 мая
SQL для тестировщиков
онлайн, начало 17 мая
Английский для тестировщиков
онлайн, начало 17 мая
Фотография

Selenium + python + Kendo


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

#1 puzo

puzo

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

  • Members
  • Pip
  • 5 сообщений
  • ФИО:Пузов Андрюха

Отправлено 30 сентября 2020 - 05:03

всем привет!

надо выбрать элемент из списка. только в кендо он лежит рядом, а не в ul -> li

изначально айдишник списка - тег спан.

если делаю на сайте в консоли - всё получается, всё меняется. а через execute_script - никак

пока дошёл до такого варианта (перепробовал уже много, всё никак)

 

with open('f:\progr\python\jquery-3.5.1.min.js', 'r') as jquery_js:
        kendo_js = open('f:\progr\python\kendo.min.js', 'r')
        jquery = jquery_js.read() #read the jquery from a file
        kendo = kendo_js.read()
        browser.execute_script(jquery) #active the jquery lib
        browser.execute_script(kendo)
        browser.execute_script('$(arguments[0]).data(arguments[1]).valu(arguments[2]', "#Category", "kendoDropDownList", 4)

 

ругается одинаково -

selenium.common.exceptions.JavascriptException: Message: TypeError: $(...).data(...) is undefined

 

не понимаю, почему в консоли дефайнед, а через питон - андефайнед

помогите, пожалуйста.


  • 0

#2 vladMat

vladMat

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

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

Отправлено 04 октября 2020 - 22:24

Попробуйте не использовать jquery. Воспользуйтесь базовым синтаксисом js: document.querySelector() илил document.getElementById


  • 0

#3 puzo

puzo

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

  • Members
  • Pip
  • 5 сообщений
  • ФИО:Пузов Андрюха

Отправлено 05 октября 2020 - 03:25

да я уж как не пробовал. смысл в том, что список лежит дальше ниже по коду страницы. а выбрать его надо как-будто бы в списке.

через квериселектор и начал.

вот если подскажете, как в SPAN-е выбрать элемент списка неоттуда - буду признателен

как можно сцепить - сначала в этот айди засунуть список а потом выбрать его элемент?


  • 0

#4 vladMat

vladMat

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

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

Отправлено 13 октября 2020 - 01:22

Честно говоря, на словах тяжело понять что вам надо.

1. в span нельзя задать какой-то элемент из списка. Возможно значение элемента передается в скрытый input или select

2. на практике была проблема с react приложением и execut_script - самое простое, добавить временную задержку, посложнение - Webdriver.wait


  • 0

#5 puzo

puzo

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

  • Members
  • Pip
  • 5 сообщений
  • ФИО:Пузов Андрюха

Отправлено 13 октября 2020 - 02:12

Честно говоря, на словах тяжело понять что вам надо.

1. в span нельзя задать какой-то элемент из списка. Возможно значение элемента передается в скрытый input или select

вот смотрите пример с сайта кендо:

https://demos.teleri...pdownlist/index

изначально в "Select category" ничего нет. то есть если поискать по слову, например, Beverages, то оно там дальше на странице. хотя оно вроде как должно быть в этом листе.

вот у меня полностью такая же ситуация ((


  • 0

#6 vladMat

vladMat

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

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

Отправлено 15 октября 2020 - 04:28

Так я выбрал элемент из списка (список с пунктами можно предварительно не открывать)

document.querySelectorAll('#categories_listbox li')[2].click()

[2] - третий элемент в списке

Другой способ:
Как говорил раньше, есть скрытый инпут, который и передает на сервер значение (номер) выбранной категории https://prnt.sc/uzl5as
 

Если знаете чем заполнять, то можно сразу инпут заполнить

document.querySelector('#categories').value = "3"

Если изначально неизвестно чем заполнять, то значение можно получить так:

document.querySelectorAll('#categories_listbox li')[2].dataset.offsetIndex

  • 0

#7 puzo

puzo

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

  • Members
  • Pip
  • 5 сообщений
  • ФИО:Пузов Андрюха

Отправлено 15 октября 2020 - 04:35

спасибо. вернусь из отпуска в пнд - попробую.


  • 0

#8 puzo

puzo

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

  • Members
  • Pip
  • 5 сообщений
  • ФИО:Пузов Андрюха

Отправлено 19 октября 2020 - 09:36

 

Так я выбрал элемент из списка (список с пунктами можно предварительно не открывать)

document.querySelectorAll('#categories_listbox li')[2].click()

 

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

я примерно так и написал.

если делать через селениум и

browser.execute_script("document.querySelectorAll('#Category_listbox li')[3].click()")

то не работает. не ругается, но и не работает. (у нас чуть другой АйДи - неважно)


  • 0

#9 vladMat

vladMat

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

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

Отправлено 19 октября 2020 - 19:17

Ок, какие есть варианты:
1. Неправильный контекст browser, возможно браузер ищет не на нужной странице. Можно попробовать найти элемент body взять innerHTML и проверить поиском что элемент '#Category_listbox li' есть в body
2. Возможно на странице есть iframe, тогда вначале нужно провалиться в этот iframe

3. Возможно элемент появляется на странице динамически, проверяется добавлением задержки в 5-10 секунд перед кликом

4. Можно отдебажить через console.log, подсовывая разные элементы, это все через execute_script

5. То же что и в 4 пункте, но с помощью alert


  • 0


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



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

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

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