如何检查元素是否在屏幕上

-1 投票
1 回答
874 浏览
提问于 2025-04-28 15:34

我有一个情况需要找出现在显示的是哪个按钮。我首先是这样尝试的:{请不要在意我的辅助函数。我想你能很容易理解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)

撰写回答