Dan*_*rts 20 python selenium unit-testing webdriver selenium-webdriver
我可能会对从Selenium到WebDriver及其各自文档的更改感到困惑.在文档中有关测试设计的部分中,讨论了使用Assert vs Verify,例如AssertElementPresent.但是,在浏览WebDriver教程并开始设置测试时,Python似乎无法提供.我是否忽略了文档中的内容,这是不适用于WebDriver,不适用于使用python,我应该使用python的功能而不是来自selenium的assert/verify命令等吗?
Cor*_*erg 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()
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)
所以在这种情况下,您的测试不会失败.但是仍然会进行验证并打印到stdout.
所以最后,这是你想要失败的问题.它更像是一种测试设计.希望这可以帮助.
您应该使用以下函数来检查:
def is_element_present(self, how, what):
try: self.driver.find_element(by=how, value=what)
except NoSuchElementException as e: return False
return True
Run Code Online (Sandbox Code Playgroud)
这是Selenium IDE在导出到Python代码时默认生成的.
然后你可以断言元素如下:
self.assertTrue(self.is_element_present(By.ID, "footer"))
self.assertTrue(self.is_element_present(By.CSS_SELECTOR, "header.global-header"))
Run Code Online (Sandbox Code Playgroud)
请注意,以下导入需要使用By:
from selenium.webdriver.common.by import By
Run Code Online (Sandbox Code Playgroud)