我正在尝试等待搜索下拉框出现,然后使用以下代码片段在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:
我使用预期条件的方式是否存在问题,或者我可以利用某些更好的预期条件?
答案 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")))
答案 2 :(得分:0)
我在Java中也遇到了同样的问题,可以通过流畅的等待解决。
有关pyton,请参见以下链接: Java's FluentWait in Python
您需要在ignore_exceptions列表中添加TimeoutException。