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

标签 python selenium selenium-webdriver

例如:

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/

相关文章:

java - 断言 2 个字符串按字母顺序排列

python - 有没有办法在 Python 中运行 selenium 时隐藏浏览器?

java - Selenium - 鼠标悬停而不出现真正的鼠标

python - 如何在机器人框架或Python中将日期格式(如 'Wed Mar 13 10:10 EDT 2013')转换为 "2013-03-13 10:10"

python - Shell 命令在 python 3 上卡住,但在 python 2 上工作

python - 从 matplotlib 样式获取颜色

python - 如何从上下文中获取 View 中对象的id?

python - 如何访问亚马逊类别列表的第 101 页

javascript - Python - Selenium 测试在尝试接受警报时卡住

Java - 等待下载带有部分文件名的文件