我有一段代碼檢查是否有使用 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"}
uj5u.com熱心網友回復:
從錯誤中可以清楚地看到,您的代碼無法定位按error-code類名定位的元素。
這可能是由幾個問題引起的:
- 您使用了錯誤的定位器,
error-code該頁面上沒有具有類名屬性的元素。 - 您錯過了等待/延遲。可能您正試圖在頁面加載之前訪問此元素。
- 也許那里有一個 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')將回傳一個網頁元素串列。如果 element 存在,這將回傳一個解釋為 boolean 的非空串列true。否則,它將回傳一個被解釋為 boolean 的空串列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()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/339603.html
