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

时间:2014-10-20 20:24:06

标签: python selenium

我有一个案例需要找出现在显示的按钮。我首先尝试这种方式 {请不要介意我的助手功能。我认为你很容易理解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)

但是它开始出现驱动程序无法找到元素的错误,所以我通过尝试覆盖它,但它也不适用于我。

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失败,那么它从尝试中退出,我需要检查是否有LOGOUT按钮。是否可以不经过尝试检查元素,但也没有硒错误?

1 个答案:

答案 0 :(得分:1)

您可以抓住specific selenium errors,例如:

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)