一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

使用Selenium WebDriver,Python和Chrome編寫您的第一個Web測試

 軟件測試test 2020-07-28

準(zhǔn)備好WebDriver后,讓我們編寫第一個Web測試測試將是一個簡單的DuckDuckGo搜索。DuckDuckGo是一個不跟蹤用戶數(shù)據(jù)的搜索引擎。就像任何其他搜索引擎一樣,用戶可以輸入搜索短語并獲得指向匹配網(wǎng)站的鏈接。

在編寫自動化代碼之前,最好總是以簡單的語言編寫測試過程。編寫程序迫使我們首先考慮被測行為。這是我們的測試過程:

  1. 導(dǎo)航到DuckDuckGo主頁

  2. 輸入搜索詞組

  3. 驗證:

    1. 結(jié)果顯示在結(jié)果頁面上

    2. 搜索詞出現(xiàn)在搜索欄中

    3. 至少一個搜索結(jié)果包含搜索短語

這是相當(dāng)基本的,但涵蓋了端到端的典型搜索行為。

代碼

將以下測試功能添加到tests/test_web.py

def test_basic_duckduckgo_search(browser): URL = 'https://www.' 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"http://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函數(shù)按照Arrange-Act-Assert模式執(zhí)行我們的測試過程請注意,測試函數(shù)聲明了一個名為的參數(shù)browser,該參數(shù)  與我們用于ChromeDriver設(shè)置和清除的固定裝置相同。每次運行此測試時,pytest都會自動調(diào)用固定裝置并注入WebDriver參考。然后,測試函數(shù)使用該browser變量進行多個WebDriver調(diào)用。讓我們看看這些調(diào)用是如何工作的。

URL = 'https://www.'

該測試將DuckDuckGo主頁的URL聲明為變量,以提高可讀性和可維護性。

PHRASE = 'panda'

這是測試將使用的搜索短語。由于測試涵蓋了“基本”搜索,因此該短語并不太重要。其他行使不同行為的測試應(yīng)使用更復(fù)雜的短語。再次,測試將其聲明在測試功能的頂部,以提高可讀性和可維護性。

browser.get(URL)

測試的起點是DuckDuckGo主頁。此調(diào)用將瀏覽器導(dǎo)航到給定的URL。被警告,雖然:此調(diào)用并  不會等待頁面加載。它只是啟動加載交互。

search_input = browser.find_element_by_id('search_form_input_homepage')

自動化Web交互的第一步是找到目標(biāo)元素。元素可能會或可能不會出現(xiàn)在頁面上。自動化必須使用  定位器  來查找元素(如果存在),然后構(gòu)造一個代表該元素的對象。定位符的類型很多:ID類名,CSS選擇器XPaths等。定位器將在頁面上找到所有匹配的元素-可能不止一個。嘗試使用最簡單的定位器,該定位器將唯一地標(biāo)識目標(biāo)元素。

要編寫定位器,您需要查看頁面的HTML結(jié)構(gòu)。Chrome DevTools可輕松檢查任何實時頁面的標(biāo)記。只需右鍵單擊頁面,然后選擇“檢查”。您可以在“元素”選項卡上查看所有元素。對于我們的測試,我們想在DuckDuckGo主頁上找到搜索輸入字段。該元素的  id  屬性值為“ search_form_input_homepage”,如下所示:

我們可以使用WebDriver的find_element_by_id 方法獲取該元素search_input變量分配了代表頁面上搜索輸入元素的對象。請記住,由于WebDriver實例具有隱式等待,因此最多等待10秒鐘,搜索輸入元素才會出現(xiàn)在頁面上。

search_input.send_keys(PHRASE + Keys.RETURN)

有了元素,我們就可以觸發(fā)與它的交互。send_keys方法將一系列擊鍵發(fā)送到搜索輸入元素,就像人類用戶會在鍵盤上鍵入一樣。上面的呼叫發(fā)送搜索詞組。最后的RETURN鍵提交搜索。

斷言(1)

link_divs = browser.find_elements_by_css_selector('#links > div')

?

結(jié)果頁面應(yīng)顯示一個divID為“ links”的div元素,每個結(jié)果鏈接都有一個子元素。上面的CSS選擇器可以找到所有這樣的結(jié)果鏈接div。請注意,“元素”是復(fù)數(shù)–此調(diào)用將返回一個列表。

assert len(link_divs) > 0

測試必須驗證搜索詞是否確實出現(xiàn)了結(jié)果。assert語句確保在頁面上至少找到一個結(jié)果鏈接。

斷言(2)

xpath = f"http://div[@id='links']//*[contains(text(), '{PHRASE}')]"

驗證是否出現(xiàn)了一些結(jié)果很好,但是我們還應(yīng)該驗證結(jié)果是否與我們的搜索詞匹配。我們可以使用XPath來精確定位包含文本中搜索短語的結(jié)果鏈接。XPath比名稱和CSS選擇器復(fù)雜,但它們也更強大。上面的XPath搜索divID為“ links”的鏈接,然后查找包含搜索短語文本的后代。

phrase_results = browser.find_elements_by_xpath(xpath)

此調(diào)用使用先前串聯(lián)的XPath查找所有元素。我們可以將這兩行合并為一,但是將這些行拆分起來更具可讀性和Python風(fēng)格。

assert len(phrase_results) > 0

像先前的斷言一樣,此斷言確保至少找到一個元素。這是一個簡單的健全性檢查。它可以變得更強大-就像驗證頁面上的每個結(jié)果都包含搜索詞組文本一樣-但這很難。并非每個結(jié)果都可以包含搜索短語的確切文本。例如,某些可能具有大寫字符。對于高級驗證,定位器和邏輯將需要更加復(fù)雜。由于這是  基本的搜索測試,因此簡單的斷言就足夠了。

斷言(3)

search_input = browser.find_element_by_id('search_form_input')

最終斷言驗證搜索短語仍出現(xiàn)在搜索輸入中。上面的行與Arrange階段中的find元素調(diào)用相同  。它將再次找到搜索輸入元素。我們?yōu)槭裁床荒?/span>search_input再次使用該對象?不幸的是,先前的元素已經(jīng)  過時了頁面從搜索頁面更改為結(jié)果頁面。即使元素看起來相同,也有所不同,并且還需要一個新的定位器。因此,我們需要重新獲取它。

assert search_input.get_attribute('value') == PHRASE

?

鍵入輸入元素的文本可作為其“值”屬性訪問。該行斷言“值”屬性等于搜索詞組。它驗證該短語沒有消失。

查看并運行Web測試

現(xiàn)在,其完整代碼應(yīng)如下所示(為清晰起見,附加了注釋):tests/test_web.py

"""This module contains web test cases for the tutorial.Tests use Selenium WebDriver with Chrome and ChromeDriver.The fixtures set up and clean up the ChromeDriver instance."""import pytestfrom selenium.webdriver import Chromefrom selenium.webdriver.common.keys import Keys@pytest.fixturedef browser(): # Initialize ChromeDriver driver = Chrome() # Wait implicitly for elements to be ready before attempting interactions driver.implicitly_wait(10) # Return the driver object at the end of setup yield driver # For cleanup, quit the driver driver.quit()def test_basic_duckduckgo_search(browser): # Set up some test case data URL = 'https://www.' PHRASE = 'panda' # Navigate to the DuckDuckGo home page browser.get(URL) # Find the search input element # In the DOM, it has an 'id' attribute of 'search_form_input_homepage' search_input = browser.find_element_by_id('search_form_input_homepage') # Send a search phrase to the input and hit the RETURN key search_input.send_keys(PHRASE + Keys.RETURN) # Verify that results appear on the results page link_divs = browser.find_elements_by_css_selector('#links > div') assert len(link_divs) > 0 # Verify that at least one search result contains the search phrase xpath = f"http://div[@id='links']//*[contains(text(), '{PHRASE}')]" phrase_results = browser.find_elements_by_xpath(xpath) assert len(phrase_results) > 0 # Verify that the search phrase is the same search_input = browser.find_element_by_id('search_form_input') assert search_input.get_attribute('value') == PHRASE

現(xiàn)在,運行測試以確保它可以運行:

$ pipenv run python -m pytest============================= test session starts ==============================platform darwin -- Python 3.7.3, pytest-4.5.0, py-1.8.0, pluggy-0.12.0rootdir: /Users/andylpk247/Programming/automation-panda/python-webui-testingcollected 9 items tests/test_math.py ........ [ 88%]tests/test_web.py . [100%]=========================== 9 passed in 6.10 seconds ===========================

網(wǎng)絡(luò)測試運行時,它將打開Google Chrome。您可以觀看它自動輸入搜索短語,等待結(jié)果頁面,然后退出瀏覽器。整齊!

如果測試無法運行,請檢查以下內(nèi)容:

  • 測試計算機是否已安裝Chrome?

  • ChromeDriver是否在系統(tǒng)路徑上?

  • ChromeDriver版本與Chrome版本匹配嗎?

  • 是否有文件系統(tǒng)權(quán)限問題?

  • 防火墻是否阻止了任何端口?

  • 測試代碼正確嗎?

使用Python和Chrome安裝Selenium WebDriver
使用Pytest創(chuàng)建一個Python測試自動化項目
Selenium Firefox驅(qū)動程序:使用Firefox瀏覽器自動進行測試
WebDriverIO教程:處理Selenium中的警報和覆蓋
TeamCity VS Jenkins:選擇正確的CI / CD工具
如何在Selenium WebDriver中處理Web表?


    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    中字幕一区二区三区久久蜜桃| 日韩精品在线观看完整版| 很黄很污在线免费观看| 精品综合欧美一区二区三区| 伊人欧美一区二区三区| 最新69国产精品视频| 高清不卡视频在线观看| 97人妻精品一区二区三区免| 久久福利视频在线观看| 91一区国产中文字幕| 国语久精品在视频在线观看| 国产又大又黄又粗的黄色| 欧美欧美日韩综合一区| 好吊妞视频只有这里有精品| 精品香蕉一区二区在线| 日本av在线不卡一区| 日本妇女高清一区二区三区| 黄色三级日本在线观看| 91精品视频全国免费| 午夜福利92在线观看| 国产精品午夜一区二区三区| 91亚洲人人在字幕国产| 人人妻在人人看人人澡| 日韩少妇人妻中文字幕| 欧洲日韩精品一区二区三区| 国产又猛又大又长又粗| 九九热国产这里只有精品| 伊人网免费在线观看高清版| 91欧美视频在线观看免费| 日本东京热加勒比一区二区| 男生和女生哪个更好色| 日韩精品视频一二三区| 在线视频三区日本精品| 护士又紧又深又湿又爽的视频| 五月的丁香婷婷综合网| 亚洲一区二区精品免费| 欧美极品欧美精品欧美| 午夜激情视频一区二区| 国产一区一一一区麻豆| 中文字幕不卡欧美在线| 欧美日韩欧美国产另类|