簡體   English   中英

如何使用 if - elif - else 檢查元素是否存在

[英]How to check if an element exists using if - elif - else

我有一個下拉菜單,我需要檢查它的條目。 如果沒有條目,我可以添加新條目,如果只有一個條目,我將其刪除並添加新條目,當我有很多條目(> = 2)時,我無法繼續添加條目。 我可以通過person_rem_btn檢查它。 如果我只有一個按鈕doc_person_table:0:person_rem_btn我可以繼續 如果我有第二個按鈕doc_person_table:1:person_rem_btn我無法繼續。

我得到這個例外:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id='frmMain:doc_person_table:1:person_rem_btn']/span[1]"}

然而,這就是重點,這個元素可能不可用,我只是檢查它是否存在。 我將不勝感激任何幫助。 這是我的代碼:

if driver.find_element_by_xpath("//*[@id='frmMain:doc_person_table:1:person_rem_btn']/span[1]") == True:
   print ("there are already many entries")
   driver.close()
elif (driver.find_element_by_xpath("//*[@id='frmMain:doc_person_table:1:person_rem_btn']/span[1]") == False and driver.find_element_by_xpath("//*[@id='frmMain:doc_person_table:0:person_rem_btn']/span[1]") == True):
   print ("there is only one entry, it will be removed to proceed")
   WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='frmMain:doc_person_table:0:person_rem_btn']/ span[1]"))).click()
else:
    print ("there is no entry, you can proceed")

find_element_by_xpath不返回TrueFalse ,它返回WebElement或拋出NoSuchElementException 您可以使用find_elements_by_xpath獲取列表並檢查該列表是否包含任何元素。 從等待可以指示頁面已加載的不相關元素開始

WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//*[@id^='frmMain:doc_person_table")))
# assuming this element will always appear when the page is loaded

elements = driver.find_elements_by_xpath("//*[@id='frmMain:doc_person_table:1:person_rem_btn']/span[1]")
if elements: # more verbose if len(elements) > 0
    print ("there are already many entries")
    driver.close()
else:
    elements = driver.find_elements_by_xpath("//*[@id='frmMain:doc_person_table:0:person_rem_btn']/span[1]")
    if elements:
        print ("there is only one entry, it will be removed to proceed")
        elements[0].click()
    else:
        print ("there is no entry, you can proceed")

您可以采用多種方法,其中一種方法是創建下拉條目列表,為visibility_of_all_elements_located()引入WebDriverWait並探測列表大小:

  • 使用CSS_SELECTOR

     list = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "[id*='doc_person_table'][id$='person_rem_btn']>span"))) if not list: print ("there is no entry, you can proceed") # other steps elif len(list) == 1 print ("there is only one entry, it will be removed to proceed") # other steps else: print ("there are already many entries") break
  • 使用XPATH

     list = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//*[contains(@id, 'doc_person_table') and contains(@id, 'person_rem_btn')]/span"))) if not list: print ("there is no entry, you can proceed") # other steps elif len(list) == 1 print ("there is only one entry, it will be removed to proceed") # other steps else: print ("there are already many entries") break

暫無
暫無

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

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