簡體   English   中英

Selenium WebDriver即使看起來似乎也無法單擊元素

[英]Selenium WebDriver cannot click element even though it seems to be visible

在此頁面上 ,使用Python 2,使用Firefox的 Selenium,我正在嘗試讓驅動程序單擊以下按鈕(放大鏡):

在此處輸入圖片說明

<button id="search-btn" type="button" class="header__user-menu-item header__search-btn">
          <span class="sr-only">Search</span>
          <img src="/sites/default/themes/custom/smp_bootstrap/images/search.svg" class="header__user-menu-icon fa fa-search fa-fw" alt="Search">
        </button>

我將以下代碼用於元素的XPath, x = '//*[@id="search-btn"]'

x = '//*[@id="search-btn"]'

try:
    element = WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.XPATH, x)))
except:
    print "Element not clickable"
else:
    found_element = driver.find_element_by_xpath(x)
    try:
        found_element.click()
    except:
        raise

硒的常見的例外EC.element_to_be_clickable沒有標識的元素,也不visibility_of_element_located也不presence_of_element_located

然而,奇怪的是,在某些情況下,驅動程序實際上已經能夠識別該元素,然后執行driver.find_element_by_xpath(x)似乎可以找到XPath和.click()元素。 那時一切正常。 一秒鍾我以為腳本會在頁面加載之前快速執行該操作,但是5秒鍾WebDriverWait足以加載頁面,在此之前我還有額外的頁面加載睡眠。

該元素似乎不在IFrame中。 我已經通過了“接受條件”按鈕等。

我正在運行最新版本的Firefox(61.0),Selenium(3.13)和Geckodriver(0.21.0)。

這可能是什么問題?

如果我用By.ID而不是By.XPATH獲取元素,這行得通,也許您輸入了錯誤的xpath

如果使用xpath也可以x = '//*[@id="search-btn"]'

id = 'search-btn'
element = WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.ID, id)))
element.click() 

可以使用以下方法來定位<img>標記,而不是使用<button>元素進行更細化的處理:

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//img[@class='header__user-menu-icon fa fa-search fa-fw' and @alt='Search']"))).click()

使用Firefox作為驅動程序,我能夠通過執行JavaScript單擊該元素:

driver.execute_script("window.document.getElementById('search-btn').click()")

請注意,以上是非常規措施,不需要使用。 其他答案是正確的,也是通常的做法。

問題在於Selenium驅動程序無法識別XPath元素,這是由於當前版本的geckodriver(0.21.0)與Selenium(3.13.0)結合存在錯誤 ,請參閱: 出現以下問題時 ,Selenium webdriver管道錯誤:命令之間的差距?

我降級到geckodriver 0.20.1以避免該問題。

暫無
暫無

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

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