微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Selenium Python-缺少元素时出现定位器错误,但我希望它们失败

例如:

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] 举报,一经查实,本站将立刻删除。

相关推荐