簡體   English   中英

無法單擊搜索下拉框

[英]Unable to click a search drop down box

我正在嘗試等待搜索下拉框出現,然后使用以下代碼片段在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: 

我使用預期條件的方式是否有問題,還是可以利用更好的預期條件?

您試圖等待一個不可見且不可單擊的元素,直到單擊“ All下拉列表。 我的意思是,您要單擊的定位器在單擊All下拉列表后將變為可見或可單擊,並且您在此處使用了錯誤的定位器。

嘗試使用//div[@id='nav-search-dropdown-card']/div作為xpath,以便您可以標識All下拉按鈕並單擊它。

如果要從下拉列表中選擇選項,則需要在單擊All下拉列表后使用searchDropdownBox作為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')

希望對您有幫助...

我認為您可以嘗試使用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

我在Java中也遇到了同樣的問題,這可以通過流暢的等待解決。

對於pyton,請參考以下鏈接: Python中的Java FluentWait

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM