如何验证python中按钮的可见性

时间:2017-08-23 20:33:06

标签: javascript python selenium

我正在尝试验证UI上是否未显示按钮元素。代码由开发人员用Java脚本编写。我正在使用Selenium Webdriver和Python编写自动化脚本。如果启用该按钮,我可以看到代码中添加了li标记。但是,如果禁用某个按钮,当我从UI(F12-> Inspect Elements)检查按钮时,该按钮的代码会消失。

目前,我的代码看起来像这样

def delete_btn_disabled(self):        
        try:
            button = self.driver.find_element(*Elements.delete_btn).is_displayed()
            if button is True:
                return True
        except NoSuchElementException:
            return False 

我的测试用例如下:

        if spage.delete_btn_disabled() is False:
            print("Test passed")
        else:
            print("Test failed")

有没有更好的方法来解决这个问题?抛出NoSuchElementException看起来有点脏(如果我错了请纠正我),我也必须为其他测试用例处理这种类型的代码。

我用谷歌搜索了这个,但似乎找不到解决这个问题的正确方法。

感谢任何帮助。

3 个答案:

答案 0 :(得分:0)

使用.find_elements()查看元素是否存在。如果返回的列表为空,则表示该元素不存在(或显示)。如果它不为空,请检查第一个元素上的.is_displayed()

def delete_btn_disabled(self):        
    button = self.driver.find_elements(*Elements.delete_btn)
    if button:
        return button[0].is_displayed()
    else:
        return False

答案 1 :(得分:0)

is_displayed不等于is_visible

您仍然无法确定按钮是否在UI中可见,即使它显示在屏幕外的某个位置。所以它仍然不可点击。

答案 2 :(得分:0)

Selenium使用期望和等待来最好地管理这些条件。这将确保如果它不能满足您的期望,它也将超时。您可以使用visibility_of便捷方法等待可见性,如下所示:

from selenium.webdriver.support import expected_conditions as EC 

element = WebDriverWait(driver, 10).until(EC.visibility_of((By.ID, 'id_1')))

有一个完整的期望方法列表here.