使用Python和WebDriver断言/ VerifyElementPresent?

时间:2012-01-13 13:58:57

标签: python unit-testing selenium selenium-webdriver webdriver

我可能会对从Selenium到WebDriver及其各自文档的更改感到困惑。在文档中有关测试设计的部分中,有关于使用Assert vs Verify(如AssertElementPresent)的讨论。但是,在浏览WebDriver教程并开始设置测试时,Python似乎无法提供。我是否忽略了文档中的内容,这是不适用于WebDriver,不适用于使用python,我应该使用python的功能而不是来自selenium的assert / verify命令等吗?

5 个答案:

答案 0 :(得分:21)

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。最好使用像python的unittest这样的测试框架,它具有更强大的断言。

答案 1 :(得分:6)

在Selenium RC中,存在验证/断言方法。在WebDriver中,他们没有。此外,重要的是要注意验证和断言的作用以及它们在您的测试中的作用。在Selenium RC中,验证用于执行测试,无论是文本,元素还是您的测试。另一方面,断言将导致测试失败并停止。您引用的链接中讨论了优点和优点。

WebDriver没有说出验证/断言方法。断言在测试本身中执行。如果你看看Corey的回答,他会执行一个"断言"在元素的文本上。如果元素的文字不是'示例域名'将引发AssertionError,导致测试失败。但验证怎么样?如上所述,WebDriver没有。但是你仍然可以通过比较来执行相同的操作。

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

所以在这种情况下,你的测试不会失败。但是仍然会进行验证并打印到stdout。

所以最后,这是你想要失败的问题。它更像是一种测试设计。希望这会有所帮助。

答案 2 :(得分:5)

您应该使用以下函数来检查:

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

导出到Python代码时由Selenium IDE生成的默认值。

然后你可以断言元素如下:

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

答案 3 :(得分:1)

另一种方式如下:

from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://www.testing.com')
element = driver.find_element_by_xpath('xpath of the element').text
assert element == 'Sample Text'
driver.quit()

答案 4 :(得分:-2)

验证Assert

driver= webdriver.Firefox()

String x =driver.findElement(By.xpath("//*[@id='userNavLabel']")).getText();

System.out.println(x);

//Assert.assertEquals(actual, expected)

Assert.assertEquals("Anandan Aranganath", x);