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

Фотография

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


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

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