作者:White Song
Blog: https://blog.yilon.top
介紹
相關文章:以后再有人問你selenium是什么,你就把這篇文章給他
如果有耐心,可以詳細閱讀上方文檔,下面是精煉概要
如今,大多數軟件應用都是跑在瀏覽器中的網站應用。不同公司和組織之間的測試效率迥異。在這個富交互和響應式處理隨處可見的時代,很多組織都使用敏捷的方式來開發,因此測試自動化也成為軟件項目的必備部分。測試自動化意味着使用軟件工具來反復運行項目中的測試,並為回歸測試提供反饋。
自動化測試,就是把手工進行的測試過程,轉變成機器自動執行的測試過程。該過程,依舊是為了發現錯誤而執行。因此自動化測試的關鍵在於“自動化”三個字。自動化測試的內容,也就相應的轉變成如何“自動化”去實現原本手工進行的測試的過程。
自動化測試可以涉及和試用的范圍主要在以下方面:
- 基於
Web UI
的瀏覽器應用的界面測試 - 基於
WebService
或者WebAPI
的服務契約測試 - 基於
WCF
、.net remoting
、Spring
等框架的服務的集成測試 - 基於
APP UI
的移動應用界面測試 - 基於
Java
、C#
等編程文件進行的單元測試
基於Web UI
的自動化測試工具主要有兩大類:付費的商業版工具和免費使用的開源版工具。典型的有兩種:
- UFT,QTP被惠普收購以后的新名稱。
- 通過程序的錄制,可以實現測試的編輯
- 錄制的測試腳本是 VBScript 語法
- 成熟版的商業付費工具
- 工具比較龐大,對具體的項目定制測試有難度
- SELENIUM,本次選擇的開源工具
- 本身不是測試工具,只是模擬瀏覽器操作的工具
- 背后有 Google 維護源代碼
- 支持全部主流的瀏覽器
- 支持主流的編程語言,包括:Java、Python、C#、PHP、Ruby、JavaScript等
- 工具很小,可以實現對測試項目的定制測試方案
- 基於標准的 WebDriver 語法規范
Selenium 是開源的自動化測試工具, 應該是最廣泛使用的開源方案。它主要是用於Web 應用程序的自動化測試,不只局限於此,同時支持所有基於web 的管理任務自動化。
Selenium 是用於測試 Web 應用程序用戶界面 (UI) 的常用框架。它是一款用於運行端到端功能測試的超強工具。您可以使用多個編程語言編寫測試,並且 Selenium 能夠在一個或多個瀏覽器中執行這些測試。
- elenium 官網:selenium.dev/
- Selenium Github 主頁:github.com/SeleniumHQ
教程
以下是Python使用Selenium個人學習心得
webdriver使用配置
在使用WebDriver來操作瀏覽器時,請先下載相應的driver
from selenium import webdriver
driver = webdriver.Chrome()
各瀏覽器Driver下載地址
使用時可直接指定driver的路徑,也可將路徑添加到瀏覽器的Application目錄下,然后將該路徑添加到PATH
中.
from selenium import webdriver
driver = webdriver.Chrome("./chromedriver")
實戰
使用Python + Selenium,自動發布博客文章。
文章格式建議為Markdown
格式。
發布個人博客
博客簡介
相關代碼
測試文件
元數據最好設置成yaml格式
---
title: 自動發布測試文章
date: 2020-03-20
categories: ["測試"]
summary: "摘要信息"
author: White Song
tags: ["標簽"]
cover: https://img.yilon.top/blog/cld3w.jpg
blog: https://blog.yilon.top
---
### 自動發布
自動發布文章正文測試。。
### 參考地址
> [分吟 - 博客](https://blog.yilon.top/)
主入口
核心方法
代碼太多,在這里就不粘貼了。
詳細可見Github地址:blog-auto-sender
常見問題匯總
-
可以使用
get_attribute
方法進行調試button = self.driver.find_element_by_xpath("//button[@type='button']") button.get_attribute("class")
-
編寫前可以先考慮人的正常操作,然后執行相應的步驟。如鼠標懸停
ActionChains(self.driver).move_to_element(ele).perform()
-
打開本地html文件
from selenium import webdriver driver = webdriver.Firefox(executable_path="data/driver/geckodriver") driver.get("file://${文件絕對路徑}")
-
find_element_by_xpath
方法元素是從下標1
開始。 -
對於ajax等需要異步請求的組件,使用
WebDriverWait
, 才可以正確取到元素 -
讓當前的元素滾動到瀏覽器窗口的可視區域內。
#當傳入參數為分別為true與false時,當點擊右側的按鈕時,紅色的div會貼近可視區域的頂部或底部。 self.driver.execute_script("arguments[0].scrollIntoView(false);", button)
-
由於某些編輯器對輸入有自動格式化,可通過模擬復制粘貼的方式解決
# 前置安裝 pip install --upgrade --force-reinstall PyObjC PyObjC-core # 若安裝不了,請使用安裝包:python setup.py install # https://github.com/SavinaRoja/PyUserInput/wiki/Installation pip install PyUserInput pyperclip.copy(self.content) k = pykeyboard.PyKeyboard() ele_edit.send_keys(Keys.CONTROL, 'a') ele_edit.send_keys(Keys.RETURN) time.sleep(1) # ele_edit.send_keys(Keys.CONTROL, 'v') k.press_keys(['Command', 'v']) k.press_keys(['Return']) time.sleep(1)
-
在python執行過程中,提示selenium.common.exceptions.WebDriverException: Message: TypeError: can't access dead object
原因是代碼中用到了frame,獲取元素前需要切換到frame才能定位到元素,否則無法定位到元素.
在查找元素前加一句driver.switch_to_default_content() 退出frame
self.driver.switch_to.default_content() # 退出frame,沒有這一句后續的元素定位會出錯 rite_blog = WebDriverWait(self.driver, self.timeout).until(lambda d: d.find_element_by_xpath("/html/body/div[1]/div/div/ul/li[@class='write-bolg-btn']/a"))
項目地址
Github地址:blog-auto-sender