例如:
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 block 中手动引发测试失败吗?
最佳答案
你可以拿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")
关于python - Selenium Python - 缺少元素的定位器错误,但我希望它们失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32613748/