例如:
el = self.browser.find_element_by_css_selector('.test')
self.assertTrue(el.text, "No text in Element")
如果类.test的元素不在页面上,则会在第一行发生错误.但就我而言,应该将其报告为测试失败而不是测试错误. (如果该元素不在页面上,则我希望此元素显示为测试失败-就像它存在但没有文本一样).
我该如何实现.
我对Python完全陌生.我以为with语句可能会有所帮助,但如果尝试以下操作,则可以:
with self.browser.find_element_by_css_selector('.test') as el
#do test
之所以失败,是因为find_element_by_css_selector似乎不需要__enter__和__exit__方法.
我应该只使用try … catch语句吗?如果可以,我可以手动在catch块中引发测试失败吗?
解决方法:
您可以在此处输入EAFP
approach并捕获NoSuchElementException:
from selenium.common.exceptions import NoSuchElementException
try:
el = self.browser.find_element_by_css_selector('.test')
except NoSuchElementException:
self.fail("No such element found")
要遵循DRY原理,可以将其包装为方法并重复使用:
def find_element(self, by, value):
try:
return self.browser.find_element(by=by, value=value)
except NoSuchElementException:
self.fail("No element found using '%s' locator, value: '%s'" % (by, value))
用法:
el = self.find_element(by=By.CSS_SELECTOR, value=".test")
或者,您可以“look before you leap”:
elements = self.browser.find_elements_by_css_selector('.test')
self.assertEqual(len(elements), 1)
self.assertTrue(elements[0].text, "No text in Element")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。