我正在尝试验证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
看起来有点脏(如果我错了请纠正我),我也必须为其他测试用例处理这种类型的代码。
我用谷歌搜索了这个,但似乎找不到解决这个问题的正确方法。
感谢任何帮助。
答案 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.