【问题标题】:python selenium autocomplete search issuepython selenium自动完成搜索问题
【发布时间】:2019-05-05 18:17:12
【问题描述】:

我正在尝试填写自动完成的邮政编码/城镇表格。即使您输入了整个邮政编码/城镇,您仍然必须验证自动完成搜索(就在输入下方)。我不会为每次尝试都输入整个错误消息,否则我的帖子会太长(我为每个尝试输入一个数字尝试和 --> 显示相应的结果)。

输入:

ville = 31000 Toulouse
geo = driver.find_element_by_id("location_p")  
geo.send_keys(ville) 

从这里开始问题: 这是制作 pbs 的线路:

<li data-region="16" data-dpt-code="31" class="selected">
<span class="city" title="Toulouse">Toulouse</span>&nbsp;
<span class="zipcode">31000</span>
</li>   

1.

validate = driver.find_element_by_xpath("//li[@class='selected'][contains(.,'data-dpt-code')]")
validate.click() 

--> 无法定位元素

2.

validate = driver.find_element_by_css_selector("li.selected") 
validate.click()

--> &lt;exception str() failed&gt;

但是

validate = driver.find_element_by_css_selector("li.selected")
assertTrue(validate_is_displayed() and validate_is_enabled())
validate.click()

-> 无法定位元素

3。 从这个:How to handle autocomplete list in webdriver?,我试过了:

geo.send_keys(Keys.TAB) 
geo.send_keys(Keys.TAB) 
geo.send_keys(Keys.DOWN) 

-> 没有错误,但邮政编码/城镇未验证

4.来自Selenium Python - select from autosuggest dropdown,尝试过

from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

 wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@class='selected']/span[@class='city][contains(.,'Toulouse')]"

-> 同上 3

5.来自Selenium in Python How use a If - else code if an element is not present,我试过了:

elem = driver.find_element_by_xpath('//*[@class="selected"][contains(.,"data-dpt-code")]')
valid = driver.find_element_by_xpath('//span[@class="city"][contains(.,"Toulouse")]')
if valid.is_displayed():
elem.click()

->selenium.common.exceptions.WebDriverException: Message: Element is not clickable at point (309.5, 9.75). Other element would receive the click: &lt;section class="content-center clearfix"&gt;&lt;/section&gt;

我需要你们的帮助!!提前感谢

【问题讨论】:

  • 您尝试send_keys(Keys.RETURN) 确认自动建议了吗?
  • &lt;li data-region="16" data-dpt-code="31" ... 看起来很动态。用更多的 outerHTML 更新问题

标签: python selenium


【解决方案1】:

从这个错误看来,元素不在屏幕上: selenium.common.exceptions.WebDriverException: Message: Element is not clickable at point (309.5, 9.75). Other element would receive the click: <section class="content-center clearfix"></section>

您是否尝试在单击之前使用动作链并移动到该元素?

from selenium.webdriver.common.action_chains import ActionChains

ActionChains(driver).move_to_element(your_element).click().perform()

【讨论】:

  • @Andersson - 不会改变任何东西。
  • @cieunteung - 没有任何改变
  • 我试过这样:mouse = webdriver.ActionChains(driver) element = driver.find_element_by_xpath('//*[@class="selected"][contains(.,"data-dpt-code")]') mouse.move_to_element(element).perform() 但这并不能解决问题。现在,我可以看到在我试图点击的方块上方有一个外部方块。我想这个外部方块是要处理的。我会回复你只是让你知道。许多thanx家伙。
【解决方案2】:

使用 WebdriverWait 尝试点击 li 元素

wait(driver, 10).until(
    EC.element_to_be_clickable((By.XPATH, '//li[@class="selected" and contains(., "Toulouse")]'))
).click()

也可以尝试不同的条件,例如 presence_of_element_locatedvisibility_of_element_located

【讨论】:

    【解决方案3】:

    我终于不得不使用 chrome 和 chromedriver:

    WebDriverWait(driver, 
    10).until(EC.visibility_of_element_located((By.CSS_SELECTOR,".location-list > 
    li:nth-child(1)"))).click()
    

    【讨论】:

      猜你喜欢
      • 2018-01-29
      • 1970-01-01
      • 2012-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-03
      • 2014-06-15
      相关资源
      最近更新 更多