使用Python和WebDriver进行Assert/VerifyElementPresent?

22 投票
5 回答
81088 浏览
提问于 2025-04-17 10:10

我可能只是对Selenium和WebDriver的变化以及它们各自的文档感到困惑。在文档的一个关于测试设计的部分,有提到使用Assert和Verify,比如AssertElementPresent。不过在我查看WebDriver的教程并开始设置测试时,发现Python中似乎没有这个功能。我是不是在文档中遗漏了什么?这个功能是不是不适用于WebDriver,或者不适用于Python?我应该使用Python的功能,而不是Selenium的assert/verify命令吗?

5 个回答

6

你应该使用下面这个函数来进行检查:

def is_element_present(self, how, what):
    try: self.driver.find_element(by=how, value=what)
    except NoSuchElementException as e: return False
    return True

这个函数是通过Selenium IDE导出为Python代码时默认生成的。

然后你可以像下面这样来验证这个元素:

self.assertTrue(self.is_element_present(By.ID, "footer"))
self.assertTrue(self.is_element_present(By.CSS_SELECTOR, "header.global-header"))

请注意,使用By时需要导入以下内容:

from selenium.webdriver.common.by import By
7

在Selenium RC中,有验证(verify)和断言(assert)的方法。而在WebDriver中,这些方法是没有的。理解验证和断言的作用对你的测试很重要。在Selenium RC中,验证是用来检查测试中的某些内容,比如文本、元素等等。而断言则是如果条件不满足,测试会直接失败并停止。

WebDriver没有专门的验证和断言方法。断言是在测试本身中进行的。如果你看看Corey的回答,他对某个元素的文本进行了“断言”。如果这个元素的文本不是'Example Domains',就会抛出一个AssertionError,这样测试就会失败。但是验证呢?正如前面提到的,WebDriver没有验证的方法。不过,你可以通过比较来实现类似的效果。

if element.text != u'Example Domains':
    print "Verify Failed: element text is not %r" % element.text

所以在这种情况下,你的测试不会失败。但验证仍然会进行,并且会打印到标准输出中。

最终,这取决于你希望什么情况下测试失败。这更多是关于测试设计的问题。希望这些信息对你有帮助。

23

webdriver 是一个用来控制浏览器的库。你需要使用 *find_element* 方法来找到网页上的元素,然后对这些元素进行条件检查。

比如,下面这段代码就是对一个元素的内容进行检查:

from selenium import webdriver

browser = webdriver.Firefox()
browser.get('http://www.example.com')
element = browser.find_element_by_tag_name('h1')
assert element.text == 'Example Domains'
browser.quit()
  • 需要注意的是,这个例子是纯 Python 代码,使用了简单的 assert 语句。其实更好的是使用像 Python 的 unittest 这样的测试框架,因为它提供了更强大的检查功能。

撰写回答