Nano Hash - криптовалюты, майнинг, программирование

Как выбрать элемент раскрывающегося меню (значение или текст) с помощью Selenium и Python?

выкладываю первый раз!

Я новичок в Python и Selenium, но я пытаюсь автоматизировать базовый тест и не могу найти ответ на эту проблему.

На главной странице ebay.com я пытаюсь выбрать раскрывающееся меню «Все категории» и выбрать вариант «Куклы и мишки» (значение параметра = «237»). Когда я выполняю свой скрипт, доступ к меню открывается, но опция «Куклы и медведи» не выбирается. Тест не выдает никаких ошибок. Я также пытался использовать select_by_visible_text.

Вот мой код. Я ценю любую помощь!

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.get("http://www.ebay.com")
assert "Electronics" in driver.title
elem = driver.find_element_by_id("gh-ac")
elem.send_keys("funny bear")
driver.find_element_by_id("gh-cat").click()

защита select_a_value (выбрать):

Select.select_by_value("237").click()

Ответы:


1

Добро пожаловать в Stack Overflow!

Вы очень близки с этим кодом. «Select» — это класс, который может быть создан, а не просто библиотека функций. Вот рабочая версия вашего скрипта:

from selenium import webdriver
from selenium.webdriver.support.select import Select
import time

driver = webdriver.Firefox()
driver.get("http://www.ebay.com")
assert "Electronics" in driver.title
elem = driver.find_element_by_id("gh-ac")
elem.send_keys("funny bear")
dropdown_web_element = driver.find_element_by_id("gh-cat")
select_box = Select(dropdown_web_element)
time.sleep(1)
select_box.select_by_value("237")

Обратите внимание, что вызов Select передает значение (в данном случае WebElement) для создания экземпляра объекта. Вы можете посмотреть исходный код селена, чтобы понять, как он называется (Python27/Lib/site-packages/selenium/webdriver/support/select.py в Windows).

Кроме того, я добавил туда time.sleep(1). Вы наткнулись на одну из разочаровывающих вещей, связанных с селеном. Асинхронная загрузка данных на веб-сайты может привести к сбою тестов, поскольку они выполняются быстрее, чем люди обычно нажимают кнопки. Данные могут отсутствовать, когда вы дойдете до этой точки в сценарии! Правильный способ справиться с этим — динамически ждать разумное количество времени, пока искомый элемент не появится. Немного выходит за рамки того, о чем вы просили, но я уверен, что вы скоро столкнетесь с этой проблемой.

Удачи!

24.06.2014
  • Я так много узнал из вашего ответа, спасибо! И да, это работает. Форматирование в моих модулях не было правильно отображено в моем сообщении, но я НЕ использовал модуль «выбор импорта», так что спасибо. Кроме того, я не был знаком с определением таких вещей, как dropdown_web_element в вашем примере кода, но я вижу, как это работает. Вы знаете, как это называется, чтобы я мог узнать об этом? Большое спасибо! 24.06.2014
  • dropdown_web_element — это имя переменной, которое я использовал для ясности. Это могло быть что угодно. driver.find_element_by_id(gh-cat) возвращает ссылку на элемент. Если вы собираетесь снова ссылаться на этот элемент, вам нужно дать ему какое-то имя. В данном случае мы использовали dropdown_web_element. 24.06.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..