无法找到自动完成选项的元素

时间:2019-09-25 18:40:15

标签: python selenium xpath css-selectors webdriverwait

在我的应用程序中,我有一个文本框,当我输入城市名称时,会将城市名称带到 选择一个城市。当我尝试定位该元素时,它说它无法定位该元素。

这是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 :(得分:0)

我认为您的问题出在以下这些代码行中:

{"Name":"Bar","MName":"","__Quiz__":"{"TaskId":"9a568a59-8d34-41e2-9c66-8fb4c534e0be","Quiz":"{\"Quiz\":\"{\\\"Status\\\":\\\"Foo\\\"}\",\"Result\":\"Success\"}","Name":"Bar","Test":"Completed"}","type":"__ActionQuiz__"}

ID html_list=driver.find_element_by_id("autocomplete-options-fd419e03-fc56-725a-dc68-0dd3e55a2b19") items = html_list.find_elements_by_tag_name("li") 看起来像一个随机ID,每次刷新页面时都会更改。在这种情况下,您想使用更强大的选择器。

我认为根本不需要获取autocomplete-options-fd419e03-fc56-725a-dc68-0dd3e55a2b19列表。我认为您可以只用其中一行替换上面两行代码:

items

这将找到带有文本driver.find_element_by_xpath("//span[text()='Hyderabad']") 的{​​{1}}元素

现在您的代码将如下所示:

span

答案 1 :(得分:0)

要在文本为 Hyderabad 自动完成元素上click(),您需要为{{1}诱导 WebDriverWait },您可以使用以下任一Locator Strategies

  • 使用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()