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