2012-01-13 124 views
17

我可能会因Selenium到WebDriver及其各自文档的更改而感到困惑。在文档中有关测试设计的章节中,有谈论使用Assert vs Verify,如AssertElementPresent。然而,在阅读WebDriver教程并开始设置测试时,这似乎并不适用于Python。我忽略文档中的东西,这是不适用于WebDriver,不适用于使用python,我应该使用python的功能,而不是从selenium等assert /验证命令?使用Python和WebDriver断言/ VerifyElementPresent?

回答

16

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这样的测试框架,它具有更强大的断言。
+0

应该是一个单独的问题,但在这里是相关的: 我将如何断言n元素不存在于页面上? – Priednis 2013-01-25 12:15:39

+0

在这里找到我的答案:http://sqa.stackexchange.com/questions/3481/quicker-way-to-assert-that-an-element-does-not-exist?rq=1 – Priednis 2013-01-25 12:29:03

+0

我宁愿做一些尝试/除了NoSuchElementException阻止find_element_by_tag_name调用,因为如果找不到元素,那么测试将标记一个异常ERROR而不是一个FAILure ...或者有没有一种方法来断言该元素存在没有这种不便? – 2014-06-05 17:48:51

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 

因此,在这种情况下,您的测试不会失败。但验证仍然会发生,并将打印到标准输出。

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

-1

验证断言

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); 
+1

硒蟒问题。不是Java – bron 2014-03-05 09:42:49

4

你应该使用下面的函数来检查:

Selenium IDE导出到Python代码时产生哪些默认
def is_element_present(self, how, what): 
    try: self.driver.find_element(by=how, value=what) 
    except NoSuchElementException as e: return False 
    return True 

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

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 
0

另一种方式如下:

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()