Python自動化UI測試之Selenium基礎實操

1. Selenium簡介


??Selenium 是一個用于 Web 應用程序測試的工具。最初是為網站自動化測試而開發的,可以直接運行在瀏覽器上,支持的瀏覽器包括 IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera 和 Edge 等。


??爬蟲中使用它是為了解決 requests 無法直接執行 JavaScript 代碼的問題。Selenium 本質上是通過驅動瀏覽器,徹底模擬瀏覽器的操作,好比跳轉、輸入、點擊、下拉等,來拿到網頁渲染之后的結果。Selenium 是 Python 的一個第三方庫,對外提供的接口能夠操作瀏覽器,從而讓瀏覽器完成自動化的操作。

2. 為什么使用Selenium?
??

????????Selenium 能模擬瀏覽器功能自動執行網頁中的 JavaScript 代碼,實現動態加載。

3. Selenium的安裝


??谷歌瀏覽器驅動下載地址:https://registry.npmmirror.com/binary.html?path=chromedriver/


??查看自己谷歌瀏覽器的版本,我這里的版本是正式版本116.0.5845.188,驅動下載地址最新的只有114.0.5735.90,所以只能去官網的測試頁面下載118.0.5993.70版本的驅動(https://googlechromelabs.github.io/chrome-for-testing/#stable,版本向下兼容),然后把下載的壓縮包解壓,將exe文件放入 PyCharm 項目的根目錄下。
??之后執行pip install selenium命令,安裝 selenium 庫。

4. Selenium的使用

from selenium import webdriver# 創建瀏覽器操作對象
path = 'chromedriver.exe'
browser= webdriver.Chrome(path)# 訪問網站
url = 'https://www.baidu.com'browser.get(url)
# content = browser.page_source
# print(content)



??需要注意的是,如果你的 selenium 是4.11.2以上的版本,不需要設置driver.exe的路徑,selenium 可以自己處理瀏覽器的驅動程序,因此代碼直接改為brower = webdriver.Chrome()即可。
??運行代碼,得到下面的效果:

5. Selenium的元素定位

??自動化工具要做的就是模擬鼠標和鍵盤來操作點擊、輸入等等元素,但是操作這些元素的前提是找到它們,WebDriver 提供了很多元素定位的方法:

  • ?根據標簽 id 獲取元素:
from selenium import webdriver
from selenium.webdriver.common.by import By# 創建瀏覽器操作對象
# path = 'chromedriver.exe'
browser= webdriver.Chrome()# 訪問網站
url = 'https://www.baidu.com'
browser.get(url)button = browser.find_element(By.ID, 'su')
# button = browser.find_elements(By.ID, 'su')
print(button)
  • 根據標簽 name 屬性的值獲取元素:
button = browser.find_element(By.NAME, 'wd')
print(button)

  • 根據 Xpath 語句獲取元素;
button = browser.find_element(By.XPATH, '//input[@id="su"]')
print(button)

  • 根據標簽名獲取元素:
button = browser.find_elements(By.TAG_NAME, 'input')
print(button)

  • 根據 bs4 語法獲取元素:
button = browser.find_elements(By.CSS_SELECTOR, '#su')
print(button)

  • 根據標簽的文本獲取元素(精確定位):
button = browser.find_elements(By.LINK_TEXT, '地圖')
print(button)

  • 根據標簽的文本獲取元素(模糊定位):
button = browser.find_elements(By.PARTIAL_LINK_TEXT, '地')
print(button)
  • 根據 class 屬性獲取元素:
button = browser.find_element(By.CLASS_NAME, 'wrapper_new')
print(button)


??當我們定位到元素之后,自然就要考慮如何獲取到元素的各種信息,selenium 給我們提供了獲取元素不同信息的方法:

  • 獲取元素屬性:
from selenium import webdriver
from selenium.webdriver.common.by import By# 創建瀏覽器操作對象
# path = 'chromedriver.exe'
browser= webdriver.Chrome()# 訪問網站
url = 'https://www.baidu.com'
browser.get(url)button = browser.find_element(By.ID, 'su')
print(input.get_attribute('class'))

  • 獲取元素標簽名:
input = browser.find_element(By.ID, 'su')
print(input.tag_name)

  • 獲取元素文本:
input = browser.find_element(By.ID, 'su')
print(input.text)
  • 獲取元素位置:
input = browser.find_element(By.ID, 'su')
print(input.location)
  • 獲取元素大小:
input = browser.find_element(By.ID, 'su')
print(input.size)

6. Selenium的交互

??頁面交互指的是我們平時在瀏覽器上的各種操作,比如輸入文本、點擊鏈接、回車、下拉框等,下面就演示 selenium 是如何進行頁面交互的。

#!/usr/bin/env python2.7
# -*- coding:utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import sysdef test(types):# 創建瀏覽器操作對象# path = 'chromedriver.exe'# 訪問網站url = 'https://www.baidu.com'browser.get(url)if types=='輸入文本':# 定位輸入框input = browser.find_element(By.ID, 'kw')# 輸入文本seleniuminput.send_keys('selenium')time.sleep(2)elif types=='點擊':# 定位輸入框input = browser.find_element(By.ID, 'kw')# 輸入文本seleniuminput.send_keys('selenium')time.sleep(2)# 定位百度一下的按鈕button = browser.find_element(By.ID, 'su')# 點擊按鈕button.click()time.sleep(2)elif types=='清除文本':# 訪問網站url = 'https://www.baidu.com'browser.get(url)# 定位輸入框input = browser.find_element(By.ID, 'kw')# 輸入文本seleniuminput.send_keys('selenium')time.sleep(2)# 清除seleniuminput.clear()time.sleep(2)elif types=='回車確認':# 訪問網站url = 'https://www.baidu.com'browser.get(url)# 定位輸入框input = browser.find_element(By.ID, 'kw')# 輸入文本seleniuminput.send_keys('selenium')time.sleep(2)# 回車查詢input.submit()time.sleep(2)elif types=='運行JavaScript':# 訪問網站url = 'https://www.baidu.com'browser.get(url)# 定位輸入框input = browser.find_element(By.ID, 'kw')# 輸入文本seleniuminput.send_keys('selenium')time.sleep(2)# 回車查詢input.submit()time.sleep(2)# js代碼js_bottom = 'document.documentElement.scrollTop=100000'# 下拉進度條,頁面滑動browser.execute_script(js_bottom)time.sleep(2)elif types=='前進后退':   # 定位輸入框input = browser.find_element(By.ID, 'kw')# 輸入文本seleniuminput.send_keys('selenium')time.sleep(2)# 回車查詢input.submit()time.sleep(2)# js代碼js_bottom = 'document.documentElement.scrollTop=100000'# 頁面滑動browser.execute_script(js_bottom)time.sleep(2)# 定位下一頁的按鈕next = browser.find_element(By.XPATH, '//a[@class="n"]')# 點擊下一頁next.click()time.sleep(2)# 返回到上一頁面browser.back()time.sleep(2)# 前進到下一頁browser.forward()time.sleep(2)else:print "請輸入正確的指令: 1.輸入文本 2.點擊 3.清除文本 4.回車確認 5.運行JavaScript 6.前進后退"time.sleep(2)# 關閉瀏覽器browser.close()if __name__ == '__main__':browser = webdriver.Chrome(executable_path='/Users/wuwei/Desktop/soft/chromedriver')gettypes=sys.argv[1]# 運行示例:python seleniumtest.py '輸入文本'test(gettypes)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/696916.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/696916.shtml
英文地址,請注明出處:http://en.pswp.cn/news/696916.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SVN忽略已提交的文件(ignore,移出版本控制)

本文適用于已安裝TortoiseSVN客戶端的同學。 1、右鍵點擊要忽略的文件夾或文件,鼠標移到“TortoiseSVN”,找到“Unversion and add to ignore list”,選擇文件夾,彈出提示框確認忽略。 2、設置完忽略文件后,還需要做…

多維時序 | Matlab實現GRU-MATT門控循環單元融合多頭注意力多變量時間序列預測模型

多維時序 | Matlab實現GRU-MATT門控循環單元融合多頭注意力多變量時間序列預測模型 目錄 多維時序 | Matlab實現GRU-MATT門控循環單元融合多頭注意力多變量時間序列預測模型預測效果基本介紹程序設計參考資料 預測效果 基本介紹 1.多維時序 | Matlab實現GRU-MATT門控循環單元融…

【Maven】介紹、下載及安裝、集成IDEA

目錄 一、什么是Maven Maven的作用 Maven模型 Maven倉庫 二、下載及安裝 三、IDEA集成Maven 1、POM配置詳解 2、配置Maven環境 局部配置 全局設置 四、創建Maven項目 五、Maven坐標詳解 六、導入Maven項目 方式1:使用Maven面板,快速導入項目 …

React Native框架開發介紹,以及其優點

大家好,我是咕嚕鐵蛋,在今天的文章中,我通過科技手段和大家一起探討一下React Native框架的開發介紹以及其優點。我深知選擇合適的開發工具對于項目的成功至關重要。而React Native作為一款流行的跨平臺移動應用開發框架,其獨特之…

Linux并發與競爭的基本概念

一. 簡介 Linux是一個多任務操作系統,肯定會存在多個任務共同操作同一段內存或者設備的情況, 多個任務甚至中斷都能訪問的資源叫做共享資源,在驅動開發中要注意對共享資源的保護,也就是要處理對共享資源的并發訪問。比如&#xf…

【服務器數據恢復】FreeNAS+ESXi虛擬機數據恢復案例

服務器數據恢復環境: 一臺服務器通過FreeNAS(本案例使用的是UFS2文件系統)實現iSCSI存儲,整個UFS2文件系統作為一個文件掛載到ESXi虛擬化系統(安裝在另外2臺服務器上)上。該虛擬化系統一共有5臺虛擬機&…

2024水科技大會暨技術裝備成果展覽會——高品質供水和飲用水水源安全保障論壇

供水與飲水安全直接關系到人民群眾的生活與健康,切實做好城市供水與飲水安全保障工作,是把以人為本真正落到實處的一項緊迫任務。近年來,中央和地方加大了城鄉供水與飲水安全保障工作的力度,對標最優質供水城市建設要求&#xff0…

[Angular 基礎] - service 服務

[Angular 基礎] - service 服務 之前的筆記就列舉三個好了……沒想到 Angular 東西這么多(ー ー;)……全加感覺越來越湊字數了 [Angular 基礎] - 視圖封裝 & 局部引用 & 父子組件中內容傳遞 [Angular 基礎] - 生命周期函數 [Angular 基礎] - 自…

請簡述你對SpringMVC的理解

SpringMVC是一種基于Java語言開發,實現了WebMVC設計模式,請求驅動類型 的輕量級Web框架。 采用了MVC架構模式的思想,通過把Model,View,Controller分離,將Web層進 行職責解耦,從而把復雜的Web應…

idea打開項目白屏

解決方法: 右鍵“最大化” idea打開項目白板解決方案_idea打開白屏-CSDN博客 IDEA 2022 CPU占用100%的問題及解決方法_java_腳本之家

STM32控制數碼管從0顯示到99

首先 先畫電路圖吧!打開proteus,導入相關器件,繪制電路圖。如下:(記得要保存啊!發現模擬一遍程序就自動退出了,有bug,我是解決不了,所以就是要及時保存,自己重…

計算機組成原理(10)----微程序控制器

目錄 1.微程序控制器的設計思想 2.微指令的基本格式 3.微程序控制器的基本結構 (1)控制存儲器CM (2)CMAR (3)地址譯碼 (4)CMDR (5)微地址形成部件 &…

31.云原生Istio可觀測性之官網Bookinfo應用實戰演示

云原生專欄大綱 文章目錄 可觀測性kiali介紹Overview(概觀)Application(應用維度)workloads(負載維度)Services(服務維度)Istio Config(配置維度) Kiali部署…

音頻聲波的主觀感受

一、響度 聲壓是“客觀”的,響度是“主觀”的。 響度又稱音量。人耳感受到的聲音強弱,它是人對聲音大小的一個主觀感覺量。響度的大小決定于聲音接收處的波幅,就同一聲源來說,波幅傳播的愈遠,響度愈小…

React18原理: React核心對象之Update、UpdateQueue、Hook、Task對象

Update 與 UpdateQueue 對象 1 ) 概述 在fiber對象中有一個屬性 fiber.updateQueue是一個鏈式隊列(即使用鏈表實現的隊列存儲結構)是和頁面更新有關的 2 )Update對象相關的數據結構 // https://github.com/facebook/react/blob/v18.2.0/pa…

【Nginx】Nginx配置反向代理 和 https

nginx.conf配置 進入linux /etc/nginx/ 打開nginx.conf 進行以下配置 http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {#監聽443端口listen 443 ssl;#你的域名server_name huiblog.top;#ssl證書的pe…

VSCode The preLaunchTask ‘C/C++: clang++ 生成活動文件‘ terminated with exit code -1

更改tasks.json文件里面的type為shell 選擇g 選擇g,然后點回到text.c,按下F5. 得到結果。 文中內容參考: 從零開始手把手教你配置屬于你的VS Code_嗶哩嗶哩_bilibili https://blog.csdn.net/qq_63872647/article/details/128006861

【EasyV】QGIS轉換至EasyV

QGIS轉換至EasyV 第一步:導入QGIS第二步 坐標系轉換第三步 集合修正第四步 重命名字段第五步 導出WGS geojson坐標第六步 導入EasyV 第一步:導入QGIS 第二步 坐標系轉換 第三步 集合修正 第四步 重命名字段 第五步 導出WGS geojson坐標 第六步 導入EasyV…

【es6】模版字面量/模版字符串,標簽函數/String.raw()靜態方法

模版字符串經常用,但是這個標簽函數的功能你肯定不知道,請看官網文檔 看完你需要知道 可以自定義標簽函數String.raw 的用法 唯一一個內置的模版字符串標簽函數第一個參數具有 raw 屬性的對象,值時一個類數組字符串對象模版字面量的緩存機制…

【vue vue-seamless-scroll】解決vue-seamless-scroll鼠標懸浮才滾動或者只滾動一次就失效的問題

解決問題:使用vue-seamless-scroll發現只有鼠標懸浮上去才滾動,而且滾動一次停止了 目標效果: 解決方案: 最后發現是因為數據需要在頁面掛載好就賦值,否則頁面在加載完成后,數據無法自動滾動。但因為數據…