AttributeError: у объекта «WebDriver» нет атрибута «select_by_visible_text» при использовании метода select_by_visible_text () для элементов через Selenium - PullRequest
0 голосов
/ 20 марта 2019

После записи данных в форму я получаю всплывающее меню.

Я пытаюсь выбрать некоторые из них и продолжить с селеном, но все варианты находятся в div теге

<div class="menu menu_theme_islands menu_size_m sg-datalist menu__control i-bem sg-datalist_js_inited menu_js_inited menu__control_js_inited sg-datalist_focused menu_focused menu_hovered" data-bem="{&quot;menu&quot;:{},&quot;sg-datalist&quot;:{}}" role="menu" tabindex="0" aria-activedescendant="uniq155307974964633">
    <div class="menu__item menu__item_theme_islands i-bem i-bem" data-bem="{&quot;menu__item&quot;:{&quot;val&quot;:30863}}" role="menuitem" id="uniq155307974964651" aria-disabled="">Магазин детской одежды</div>
    <div class="menu__item menu__item_theme_islands i-bem i-bem" data-bem="{&quot;menu__item&quot;:{&quot;val&quot;:30859}}" role="menuitem" id="uniq155307974964652" aria-disabled="">Детский магазин</div>
</div>

Я пытаюсь

company_id = driver.find_element_by_xpath("//input[@placeholder='Начните печатать и выберите из списка']")
company_id.send_keys("Магазин детской одежды")
time.sleep(1)
driver.select.select_by_visible_text("Магазин детской одежды")

Но он возвращает

AttributeError: 'WebDriver' object has no attribute 'select_by_visible_text'

Как выбрать что-то во всплывающем окне?

Ответы [ 3 ]

1 голос
/ 20 марта 2019

Это сообщение об ошибке ...

AttributeError: 'WebDriver' object has no attribute 'select_by_visible_text'

... означает, что вы пытались использовать select_by_visible_text() через WebDriver экземпляр, который не поддерживается.

Решение

Чтобы щелкнуть по элементу с текстом Магазин детской одежды , поскольку желаемыми элементами являются <div> элементами, вы можете использовать следующее решение:

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='menu menu_theme_islands menu_size_m sg-datalist menu__control i-bem sg-datalist_js_inited menu_js_inited menu__control_js_inited sg-datalist_focused menu_focused menu_hovered' and starts-with(@aria-activedescendant, 'uniq')]"))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='menu__item menu__item_theme_islands i-bem i-bem' and text()='Магазин детской одежды']"))).click()

Примечание : необходимо добавить следующие импорты:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
1 голос
/ 20 марта 2019
from selenium.webdriver.support.select import Select
Select select=Select(driver.find_element_by_css_selector("div.menu__control_js_inited"))
select.select_by_index(1)

** Вариант 2: ** Если вышеуказанное не работает, попробуйте этот способ.

driver.find_element_by_css_selector("div.menu__control_js_inited").click()
WebDriverWait(driver, 20).until(expected_conditions.element_to_be_clickable((By.XPATH, "(//div[@class='menu__item menu__item_theme_islands i-bem i-bem'])[1]"))).click()

Варианты 3:

element=driver.find_element_by_css_selector("div.menu__control_js_inited")
ActionChains(driver).move_to_element(element).perform()
WebDriverWait(driver, 20).until(expected_conditions.element_to_be_clickable((By.XPATH, "(//div[@class='menu__item menu__item_theme_islands i-bem i-bem'])[1]"))).click()

Пожалуйста, убедитесь, что вам нужноиметь следующий импорт.

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.select import Select
from selenium.webdriver import ActionChains
0 голосов
/ 20 марта 2019

Не знаю, почему вы не получили:

AttributeError: 'WebDriver' object has no attribute 'select'

Поскольку это не собственный атрибут драйвера селена.

Вам необходимо импортировать класс выбора

from selenium.webdriver.support.ui import Select

Тогда код должен выглядеть следующим образом:

company_id = driver.find_element_by_xpath("//input[@placeholder='Начните печатать и выберите из списка']")
company_id.send_keys("Магазин детской одежды")
select = Select(yourMenuElement)
el = select.select_by_visible_text("Магазин детской одежды")

print(el.text)

Редактировать: В вашем html нет тега select, и приведенное выше может не работать.

Вы можете попробовать это:

company_id = driver.find_element_by_xpath("//input[@placeholder='Начните печатать и выберите из списка']")
input_text = "Магазин детской одежды"
company_id.send_keys(input_text)
menu = driver.find_elements_by_css_selector('[role="menuitem"]')
select_el = None
for el in menu:
    if el.text == input_text:
        select_el = el
        break
if select_el is not None:
    "Do stuff"
else:
    print("Unable to find element with tex: {}".format(input_text))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...