Элемент Selenium не может быть найден в выпадающем меню Python - PullRequest
0 голосов
/ 02 сентября 2018

Я использую Selenium WebDriver на веб-сайте eBay. Я пытаюсь изменить выпадающее меню с лучшего соответствия на самую низкую цену + P & P. Это мой код:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
sortdown = browser.find_element(By.XPATH, '//*[@id="DashSortByContainer"]/ul[1]/li/div/a')
sortselect = Select(sortdown)
sortselect.select_by_visible_text('Lowest price + P&P')

Я использовал XPATH, если элемент динамический. И Питон все еще говорит, что элемент не может быть найден. Кто-нибудь может помочь? Вот пример ссылки с выпадающим меню в правом верхнем углу результатов: https://www.ebay.co.uk/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=harley&_sacat=0

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

Элемент //*[@id="DashSortByContainer"]/ul[1]/li/div/a является ссылкой, а не выбранной. Вот почему вы не можете использовать Select класс.
Вам нужно click на //*[@id="DashSortByContainer"]/ul[1]/li/div/a, затем найдите элементы со значениями в DOM и выберите тот, который вам нужен.

Вы можете найти похожий вопрос здесь с ответом, который вы можете использовать в качестве справочного.

0 голосов
/ 02 сентября 2018

Отображаемые элементы не являются настоящими Select элементами. Это просто <ul с кучей ссылок, скрытых по умолчанию. Поэтому я бы предложил что-то вроде этого:

  1. Выберите текущую ссылку сортировки (<a), чтобы открыть список других параметров. Проще всего сделать это по тексту ссылки. Селекторы типа ul[1]/li/div/ просто сбивают с толку и не нужны. Обратите внимание, что в зависимости от того, что предшествует этой операции, вам также может понадобиться эта ссылка для отображения.
  2. Выберите новую опцию, как только она появится (то есть дождитесь ее, затем нажмите).

например:.

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(browser, 10)

# click link to display all options
sortdown = browser.find_element_by_link_text('Best Match')
sortdown.click()

# select a new option
lowestprice = wait.until(EC.presence_of_element_located((By.LINK_TEXT, 'Lowest price + P&P')))
lowestprice.click()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...