如何检查元素是否在屏幕上
我有一个情况需要找出现在显示的是哪个按钮。我首先是这样尝试的:{请不要在意我的辅助函数。我想你能很容易理解Ui.find_el几乎和driver.find_element_by....是一样的。}:
if Ui.find_el(link.AuthorPopupNodes.LOGIN_EMAIL).is_displayed():
pass
else:
if Ui.find_el(link.HeaderNodes.LOGOUT_BUTTON).is_displayed():
self.log_out()
Ui.wait_for_element(link.HeaderNodes.LOGIN_BUTTON, "Timeout: Wait for Login button!")
Ui.click_el(link.HeaderNodes.LOGIN_BUTTON)
但是后来开始出现错误,提示driver找不到元素,所以我用try来处理这个问题,但对我来说也没用。
try:
if Ui.find_el(link.AuthorPopupNodes.LOGIN_EMAIL).is_displayed():
pass
else:
if Ui.find_el(link.HeaderNodes.LOGOUT_BUTTON).is_displayed():
self.log_out()
Ui.wait_for_element(link.HeaderNodes.LOGIN_BUTTON, "Timeout: Wait for Login button!")
Ui.click_el(link.HeaderNodes.LOGIN_BUTTON)
except:
pass
举个例子,如果第一个IF条件失败了,那就会跳出try块,我需要检查一下是否有LOGOUT按钮。有没有办法在不使用try的情况下检查元素,同时又不出现selenium的错误呢?
1 个回答
1
你可以捕捉一些特定的Selenium错误,比如:
from selenium.common.exceptions import NoSuchElementException, ElementNotVisibleException
try:
Ui.find_el(link.AuthorPopupNodes.LOGIN_EMAIL)
except (NoSuchElementException, ElementNotVisibleException):
try:
Ui.find_el(link.HeaderNodes.LOGOUT_BUTTON)
self.log_out()
except (NoSuchElementException, ElementNotVisibleException):
pass
Ui.wait_for_element(link.HeaderNodes.LOGIN_BUTTON, "Timeout: Wait for Login button!")
Ui.click_el(link.HeaderNodes.LOGIN_BUTTON)