无法单击搜索下拉框

时间:2019-02-11 08:57:13

标签: python selenium

我正在尝试等待搜索下拉框出现,然后使用以下代码片段在https://amazon.com上单击它。

search_dropdown_box = WebDriverWait(chrome_browser,30).until(EC.visibility_of_element_located((By.ID,"searchDropdownBox")))

尽管如此,该代码片段似乎从未起作用,它总是由于以下异常而失败。

  File "C:/Users/DHIWAKAR-PC/PycharmProjects/AlationProject/assignment.py", line 18, in <module>
    search_dropdown_box = WebDriverWait(chrome_browser,10).until(EC.visibility_of_element_located((By.ID,"searchDropdownBox")))
  File "C:\Python34\lib\site-packages\selenium\webdriver\support\wait.py", line 80, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: 

我使用预期条件的方式是否存在问题,或者我可以利用某些更好的预期条件?

3 个答案:

答案 0 :(得分:1)

您正在尝试等待一个不可见且不可单击的元素,直到单击All下拉列表为止。我的意思是,您要单击的定位器在单击All下拉菜单后将变为可见或可点击,并且您在此处使用了错误的定位器。

尝试使用//div[@id='nav-search-dropdown-card']/div作为xpath,以便您可以识别All下拉按钮并单击它。

如果要从下拉菜单中选择选项,则需要在点击searchDropdownBox下拉菜单后使用All作为ID。

尝试以下代码:

driver.get('https://www.amazon.com/')
search_dropdown_box = WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='nav-search-dropdown-card']/div")))
search_dropdown_box.click()

如果您想在点击All之后从下拉菜单中选择任何选项,则可以使用python的Select,如下所示:

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

driver = webdriver.Chrome('chromedriver path')
driver.get('https://www.amazon.com/')
search_dropdown_box = WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='nav-search-dropdown-card']/div")))
search_dropdown_box.click()

options = driver.find_element_by_id('searchDropdownBox')
select = Select(options)
select.select_by_visible_text('Baby')

希望对您有帮助...

答案 1 :(得分:0)

我认为您可以尝试使用 element_to_be_clickable

search_dropdown_box = WebDriverWait(chrome_browser,30).until(EC.element_to_be_clickable((By.ID,"searchDropdownBox")))

请参见https://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.support.expected_conditions

答案 2 :(得分:0)

我在Java中也遇到了同样的问题,可以通过流畅的等待解决。

有关pyton,请参见以下链接: Java's FluentWait in Python

您需要在ignore_exceptions列表中添加TimeoutException。