簡體   English   中英

Selenium Python:元素不可點擊

[英]Selenium Python: Element is not clickable

我正在使用 selenium 測試使用 python dash 創建的 webapp。 我試圖單擊一個選項卡,但總是得到ElementClickIntercepted Exception

注意:當然我偶然發現了類似的問題,但大多數時候問題是元素無法被點擊,因為它還沒有加載——我已經內置了等待。 - 或者另一個元素會收到點擊的事實也不是這種情況。 請注意,第一項始終是預先選擇的,我想選擇第二項

#Selct X-Axis
x_axis = driver.find_element(By.XPATH, "//*[@id='navbar']/a[2]")
x_axis.click()
driver.implicitly_wait(2)
try:
    WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, "//a[text()='Even']"))  
)
except:
    raise Exception
even= driver.find_element(By.XPATH, "//a[text()='Even']")
even.click()

異常快照:

例外

HTML 快照:

html代碼

根據您發布的內容, By.XPATH, "//a[text()='Even']"可能正在選擇與您期望的不同的 HTML 元素。

似乎有一個帶有以'Even'開頭的文本的<a> ,但是您沒有顯示任何文本等於'Even'

順便說一句,在提問時,您至少應該將相關的 HTML 粘貼為文本,而不是屏幕截圖。

在 XPath 中使用contains(text(), 'even')代替text()='even' 因為, text()='even'意味着文本必須是 'even' 但不包含 'even',並且在您的 HTML 代碼中,文本似乎不僅有 'even'。

要單擊任一元素而不是 present_of_element_located ()您需要為element_to_be_clickable()誘導WebDriverWait並且您可以使用以下任一定位器策略

  • $$$ 回應:

    • 使用PARTIAL_LINK_TEXT

       WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, "Response"))).click()
    • 使用XPATH

       WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[starts-with(@id, 'content')]//ul//div[@class='nav-item']//a[contains(., 'Response')]"))).click()
  • 甚至$$$

    • 使用PARTIAL_LINK_TEXT

       WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, "Even"))).click()
    • 使用XPATH

       WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[starts-with(@id, 'content')]//ul//div[@class='nav-item']//a[starts-with(., 'Even')]"))).click()
  • 注意:您必須添加以下導入:

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

暫無
暫無

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

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