五星上將麥克阿瑟曾經說過“不會寫自動化測試,不是好開發(fā)“
讓我們來講一個故事
今天和女朋友吵架了,(假設你有女朋友)。
今晚又是一個人睡沙發(fā),這天晚上,你躺在沙發(fā)上,夜不能寐
因為,你今天被質疑不會寫寫自動化,怒砸了秦始皇的耳機!
–專家說這是秦始皇當年指揮士兵滅六國帶的耳麥
決定學習一下這個事情——VS Code + Python + Selenium 自動化測試基礎
為什么要寫自動化
在這之前,思考一個問題,為什么要寫自動化?
在開發(fā)一個大型的網站專案過程中,不需要針對特定的功能進行重復性的測試,其主要目的是為了確保系統(tǒng)兼容是否合乎規(guī)格,并確認其結果是否合乎預期。但在整個網站測試的過程中其中,存在很多測試細節(jié)或者高度重復性質的測試行為,如果僅仰賴人工測試,往往會測到昏暗地,并且有可能會隱藏人的疏失,導致難以追蹤的問題。
因此自動化測試在整個專案進行開發(fā)的過程中會扮演重要的一環(huán)。在我們進一步去編寫自動化腳本的動作之前,需要先建立起基本的開發(fā)環(huán)境,之后接下來就著手進行編寫腳本的動作。
開發(fā)前的準備工作
1.安裝 VS Code
2.安裝 VS Code Python 擴展
3.安裝Python3(版本3.8.2)下載
安裝完成后,可以通過以下指令確認是否安裝完成
# python --版本
Python 3.8.2
- 安裝 Selenium 的 Python 套件
# pip install selenium
# pip show selenium
5.下載Chrome的ChromeDriver
下載后,解壓縮將chromedriver.exe的執(zhí)行檔跟系統(tǒng)的Python執(zhí)行檔放在相同的數(shù)據(jù)夾下就可以全域(Global)使用chromedriver
基本上 Selenuim 能夠控制瀏覽器行為、或者瀏覽器進行溝通,都需要透過 Webdriver 或者 Selenuim RC (Remote Control) 來控制,因此 WebDriver 扮演著重要的角色。
牛刀小試
1.目標:利用Python + Selenium 開啟Google首頁
from selenium import webdriver
# 使用 Chrome 的 WebDriver
browser = webdriver.Chrome()
browser.maximize_window()
browser.get("https://www.google.com")
- 目標:利用前一個示例,在 Google 輸入框中輸入“phone”,然后單擊搜索
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
# 使用 Chrome 的 WebDriver
browser = webdriver.Chrome()
browser.maximize_window()
# Google 首頁
browser.get("https://www.google.com")
# 尋找網頁中的搜索框
inputElement = browser.find_element_by_name("q")
# 在搜索框中輸入文字
inputElement.send_keys("iphone")
# 提交
inputElement.submit()
# Google 搜索結果的 XPath
resultLocator = "http://a/h3/div"
try:
# 等待網頁搜索結果
WebDriverWait(browser, 10).until(EC.visibility_of_element_located((By.XPATH, resultLocator)))
# 取得第一頁的搜索結果
page1_results = browser.find_elements_by_xpath(resultLocator)
# 輸出搜索結果
for item in page1_results:
print(item.text)
except TimeoutException:
print('等待逾時!')
開常用的web DriverAPI-定位元素
WebDriver提供了幾種元素的定位方式,在Python中對應的方式如下
id定位:find_element_by_id()
HTML規(guī)定,在HTML文件中id必須是唯一的,因此可以利用這個唯一性來尋找元素
browser.find_element_by_id(“keyword”)
name 定位:find_element_by_name()
HTML 規(guī)定,利用 name 來指定元素的名稱,因此也可以利用這個屬性來尋找元素
browser.find_element_by_name(“shopping_cart”)
class 定位:find_element_by_class_name()
HTML 規(guī)定,class 用于指定元素的類別名稱,其用法與 id、name 類似。
browser.find_element_by_class_name(“s_super”)
標簽定位:find_element_by_tag_name()
HTML透過不同的標簽來定義元素,因此可以利用標簽的名稱來直接尋找,但是這個在實際運用上卻很少使用,主要的原因是HTML文檔中,存在大量的相同標簽browser.find_element_by_tag_name
(“input”)
鏈接文本定位:find_element_by_link_text()
這個專門用于定位有文字的超鏈接,例如HTML文檔為
<a href=”//shopping.pchome.com.tw”_cid=”shopping_hp”>線上購物
則使用鏈接文本定位,可以用以下的方式表示
browser.find_element_by_link_text(“24H線上購物”)
部分鏈接定位:find_element_by_partial_link_text()
這個正式鏈接文字定位的輔助方法,有時候有些文字的超鏈接過長,這個時候可以取文字的部分文字進行定位,但是由于是取部分文字,是否具備唯一性,那就需要引用HTML文檔而定,使用方式為
browser.find_element_by_partial_link_text(“線上購物”)
XPath定位:find_element_by_xpath()
XPath有多種定位策略,最直覺的是絕對路徑定位,其絕對路徑指標簽名稱的系統(tǒng)關系來定位元素的絕對路徑
browser.find_element_by_xpath(“/html/body/div/ div[2]/form/input”)
絕對路徑定位
browser.find_element_by_xpath(“//input[@id=‘keyword’]”)
其中//input表示當前頁面的某個輸入標簽,[@id=‘keyword’] 表示這個元素的id值為keyword,因此上述內容的id也可以換成name或者class來進行元素的定位
對于自動化測試來說,學會了要素的定位方式后,基本上已經有50%的功力可以來寫腳本了。剩下的部分就是去了解WebDriver中所提供的各種方法以及真實應用。
控制瀏覽器的行為
WebDriver 提供了許多可以控制瀏覽器的方式,一般常用的有
瀏覽器視窗的大小
有時我們希望瀏覽器能夠在指定的大小下執(zhí)行,通常是為了確認RWD的效果是否正常顯示。例如我們將瀏覽器設置為480 X 800,設置為操作版的網頁,然后瀏覽頁面。這個時候可以使用 set_window_size() 來完成這個目的
from selenium import webdriver
# 使用 Chrome 的 WebDriver
browser = webdriver.Chrome()
browser.get('https://24h.m.pchome.com.tw/')
# 設定尺寸
browser.set_window_size(480, 800)
瀏覽器上一頁、下一頁
一般用戶在使用瀏覽器的時候,會使用上一頁跟下一頁,可以在曾經瀏覽過的頁面之間跳轉,因此WebDriver控制也提供了對應的方法() 和forward() 來模擬上一頁和下一頁的用戶行為。
模擬瀏覽器更新
有時用戶會按F5來刷新頁面,可以通過refresh()來實現(xiàn)。
from selenium import webdriver
from time import sleep
# 使用 Chrome 的 WebDriver
browser = webdriver.Chrome()
browser.maximize_window()
first_url = 'https://www.msn.com/zh-tw'
print ("目前瀏覽 %s" %(first_url))
browser.get(first_url)
sleep(3)
second_url = 'https://www.google.com.tw/'
print ("目前瀏覽 %s" %(second_url))
browser.get(second_url)
sleep(3)
browser.back()
browser.refresh()
sleep(3)
browser.forward()
browser.refresh()
sleep(3)
總結
僅就Python跟Selenium基礎的應用來說明并且分享心得,下一篇會再繼續(xù)介紹更進階的WebDriver應用,并且會分享如何在日常工作中中將自動化測試導入,自動化測試也是我們測試的基本功之一。
以上就是今天的全部內容,希望對大家有所幫助,也希望大家多多留言、點贊、在看、轉發(fā)四連愛?? 支持。 咱們下篇文章見,Bye~??文章來源:http://www.zghlxwxcb.cn/news/detail-812234.html
一個正經的測試,專注于AI與軟件測試技術和寶藏干貨分享,每天準時更新原創(chuàng)技術文章,每月不定期贈送技術書籍,讓我們在測試會所在測試社區(qū)這個大家庭一起學習交流。喜歡記得星標?我,每天及時獲得最新推送,文章來源地址http://www.zghlxwxcb.cn/news/detail-812234.html
到了這里,關于VS Code + Python + Selenium 自動化測試基礎-01的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!