Невозможно найти элемент параметров автозаполнения - PullRequest
0 голосов
/ 25 сентября 2019

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

Это HTML-код

<ul id="autocomplete-options-fd419e03-fc56-725a-dc68-0dd3e55a2b19" class="autocomplete-content
dropdown-content" tabindex="0" style="display: block; width: 231.948px; left: 5px; top: 54px; 
height: 50px; transform-origin: 0px 0px; opacity: 1; transform: scaleX(1) scaleY(1);">
<li class="active"><span><span class="highlight">Hyderabad</span></span></li></ul>

Вот мой код сценария

driver.find_element_by_name('residential_city_id').send_keys("Hyderabad")
tme.sleep(5)
html_list=driver.find_element_by_id("autocomplete-options-fd419e03-fc56-725a-dc68-0dd3e55a2b19")
items = html_list.find_elements_by_tag_name("li")
for item in items:
    text = item.text
    print(text)

Я получаю следующую ошибку

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate 
element: {"method":"css selector","selector":"[id="autocomplete-options-fd419e03-fc56-725a-dc68-0dd3e55a2b19"]"}
  (Session info: chrome=76.0.3809.132)

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

К click() в элементе с автозаполнением с текстом Хайдарабад вам нужно вызвать WebDriverWait для element_to_be_clickable(), и вы можете использовать любой изследующие Стратегии локатора :

  • Использование CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "ul.autocomplete-content.dropdown-content li.active > span > span.highlight"))).click()
    
  • Использование XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//ul[@class='autocomplete-content dropdown-content']//li[@class='active']/span/span[@class='highlight' and text()='Hyderabad']"))).click()
    
  • Примечание : необходимо добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
0 голосов
/ 25 сентября 2019

Я думаю, что ваша проблема в следующих строках кода:

html_list=driver.find_element_by_id("autocomplete-options-fd419e03-fc56-725a-dc68-0dd3e55a2b19")
items = html_list.find_elements_by_tag_name("li")

Идентификатор autocomplete-options-fd419e03-fc56-725a-dc68-0dd3e55a2b19 выглядит как случайный идентификатор, который меняется каждый раз, когда вы обновляете страницу.В этом случае вы хотите использовать более надежный селектор.

Я не думаю, что вообще нужен список items.Я думаю, что вы можете заменить две строки кода выше только одной:

driver.find_element_by_xpath("span[text()='Hyderabad']")

. Здесь будет найден элемент span с текстом Hyderabad

Теперь ваш код будет выглядеть так:

driver.find_element_by_name('residential_city_id').send_keys("Hyderabad")
tme.sleep(5)
driver.find_element_by_xpath("span[text()='Hyderabad']")
...