簡體   English   中英

Python if elif else 無法進入elif語句Selenium

[英]Python if elif else can't go to the elif statement Selenium

我有一段代碼檢查是否有使用 p 顯示的元素,然后它顯示一個對話框,但如果找不到它,則它檢查另一個元素,如果它顯示另一個對話框,並且該元素不可用,然后它運行一段代碼。

代碼在這里。

if driver.find_element_by_class_name('error-code').is_displayed():
    LoginError.show()
elif driver.find_element_by_xpath('//*[@id="sample-data-table"]/thead').is_displayed():
    QuestionUnavailable.show()
else:
    if driver.find_element_by_xpath('//*[@id="radio1"]').is_displayed():
        driver.find_element_by_xpath('//*[@id="radio1"]').click()
        driver.find_element_by_xpath('//*[@id="btn-savecheck"]').click()
        time.sleep(1)
        driver.find_element_by_xpath('//*[@id="btn-alert-ok"]').click()

但是當我運行它時,我收到此錯誤

File "Sciborg.py", line 60, in This
  File "C:\Python39\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 564, in find_element_by_class_name
    return self.find_element(by=By.CLASS_NAME, value=name)
  File "C:\Python39\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 976, in find_element
    return self.execute(Command.FIND_ELEMENT, {
  File "C:\Python39\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\Python39\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".error-code"}

從錯誤中可以清楚地看到,您的代碼無法定位由error-code類名定位的元素。
這可能是由幾個問題引起的:

  1. 您使用了錯誤的定位器,該頁面上沒有具有error-code類名稱屬性的元素。
  2. 您錯過了等待/延遲。 可能您正試圖在頁面加載之前訪問此元素。
  3. 也許那里有一個 iframe,因此該元素位於該 iframe 內,因此您必須切換到該 iframe 才能訪問所需的元素。
    UPD
    如果頁面上沒有這樣的元素,您可以使用find_elements代替find_element方法,如下所示:
if driver.find_elements_by_class_name('error-code'):
    LoginError.show()
elif driver.find_elements_by_xpath('//*[@id="sample-data-table"]/thead'):
    QuestionUnavailable.show()
else:
    if driver.find_elements_by_xpath('//*[@id="radio1"]'):
        driver.find_element_by_xpath('//*[@id="radio1"]').click()
        driver.find_element_by_xpath('//*[@id="btn-savecheck"]').click()
        time.sleep(1)
        driver.find_element_by_xpath('//*[@id="btn-alert-ok"]').click()

driver.find_elements_by_class_name('error-code')將返回網絡元素列表。 如果元素存在,這將返回一個非空列表,該列表被解釋為布爾值true 否則,它將返回一個被解釋為布爾值false的空列表。
同樣,我更新了另一個if案例。
但是您仍然應該確保您嘗試直接訪問的元素存在。
我的意思是這些元素:

driver.find_element_by_xpath('//*[@id="radio1"]').click()
driver.find_element_by_xpath('//*[@id="btn-savecheck"]').click()
time.sleep(1)
driver.find_element_by_xpath('//*[@id="btn-alert-ok"]').click()

暫無
暫無

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

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