Python + Selenium - не может нажать на элемент - PullRequest
0 голосов
/ 05 февраля 2019

На моей странице есть раскрывающееся меню с результатами поиска заказов:

<ul class="chzn-results" style="overflow-x: hidden;">
    <li id="selZB4_chzn_o_0" class="active-result result-selected" style=""> by popular </li>
    <li id="selZB4_chzn_o_1" class="active-result" style=""> price (from cheap) </li>
    <li id="selZB4_chzn_o_2" class="active-result" style=""> price (from expensive) </li>
    <li id="selZB4_chzn_o_3" class="active-result result-last" style=""> discount </li>
</ul>

Я нажал кнопку, чтобы открыть это раскрывающееся меню:

action = ActionChains(driver)
order = driver.find_element_by_xpath('/html/body/div[2]/div[1]/div/div[5]/div[2]/div[3]/div/div/div[2]/div[2]/span[2]/span[1]')
action.move_to_element(order).click().perform()

Откроется раскрывающееся меню.Затем я хочу выбрать «из дешевых», чтобы упорядочить объекты на моей странице, но Selenium возвращает AttributeError: у объекта «list» нет атрибута «id».

Я пробовал другие способы, например:

from_cheap = driver.find_elements_by_xpath("//[@id="selZB4_chzn_o_1"]")
action.move_to_element(from_cheap).click().perform()

или с помощью селектора CSS.или по идентификатору, но он все равно не делает клик.В чем моя ошибка?

1 Ответ

0 голосов
/ 05 февраля 2019

Требуемый элемент является динамическим элементом, поэтому для нахождения элемента необходимо вызвать WebDriverWait , чтобы элемент был активным для клика , и вы можете использовать любое из следующих решений:

  • XPATH 1:

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//ul[@class='chzn-results']//li[@class='active-result' and contains(., 'from cheap')]"))).click()
    
  • XPATH 2:

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//ul[@class='chzn-results']//li[@class='active-result' and normalize-space()='price (from cheap)']"))).click()
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...