准备好WebDriver后,让我们编写第一个Web测试!测试将是一个简单的DuckDuckGo搜索。DuckDuckGo是一个不跟踪用户数据的搜索引擎。就像任何其他搜索引擎一样,用户可以输入搜索短语并获得指向匹配网站的链接。
在编写自动化代码之前,最好总是以简单的语言编写测试过程。编写程序迫使我们首先考虑被测行为。这是我们的测试过程:
导航到DuckDuckGo主页
输入搜索词组
验证:
-
结果显示在结果页面上
搜索词出现在搜索栏中
至少一个搜索结果包含搜索短语
这是相当基本的,但涵盖了端到端的典型搜索行为。
代码
将以下测试功能添加到:tests/test_web.py
def test_basic_duckduckgo_search(browser):
URL = 'https://www.duckduckgo.com'
PHRASE = 'panda'
browser.get(URL)
search_input = browser.find_element_by_id('search_form_input_homepage')
search_input.send_keys(PHRASE + Keys.RETURN)
link_divs = browser.find_elements_by_css_selector('#links > div')
assert len(link_divs) > 0
xpath = f"//div[@id='links']//*[contains(text(), '{PHRASE}')]"
results = browser.find_elements_by_xpath(xpath)
assert len(results) > 0
search_input = browser.find_element_by_id('search_form_input')
assert search_input.get_attribute('value') == PHRASE
该test_basic_duckduckgo_search
函数按照Arrange-Act-Assert模式执行我们的测试过程。请注意,测试函数声明了一个名为的参数browser
,该参数 与我们用于ChromeDriver设置和清除的固定装置相同。每次运行此测试时,pytest都会自动调用固定装置并注入WebDriver参考。然后,测试函数使用该browser
变量进行多个WebDriver调用。让我们看看这些调用是如何工作的。
URL = 'https://www.duckduckgo.com'
该测试将DuckDuckGo主页的URL声明为变量,以提高可读性和可维护性。
PHRASE = 'panda'
这是测试将使用的搜索短语。由于测试涵盖了“基本”搜索,因此该短语并不太重要。其他行使不同行为的测试应使用更复杂的短语。再次,测试将其声明在测试功能的顶部,以提高可读性和可维护性。
browser.get(URL)
测试的起点是DuckDuckGo主页。此调用将浏览器导航到给定的URL。被警告,虽然:此调用并 不会等待页面加载。它只是启动加载交互。
search_input = browser.find_element_by_id('search_form_input_homepage')
自动化Web