基于selenium+python實現自動化測試

Selenium 是一個用于自動化Web應用程序測試的工具包,它提供了一套API,允許開發者編寫腳本來模擬用戶與瀏覽器的交互。這些API可以控制瀏覽器執行各種操作,如導航、點擊、輸入文本、滾動頁面等。使用Selenium結合Python進行自動化測試是一個常見的選擇,因為Selenium是一個強大的工具,可以模擬用戶與網頁的交互。以下是實現Selenium自動化測試的基本步驟:

  1. 安裝Selenium庫
    使用pip安裝Selenium庫:

    pip install selenium
    
  2. 下載WebDriver
    Selenium需要一個WebDriver來與瀏覽器進行交互。你需要根據你使用的瀏覽器下載相應的WebDriver。例如,如果你使用的是Chrome瀏覽器,新版本你需要下載ChromeDriver。使用的是ie瀏覽器的話,你需要下載iedriver. 這里需要注意一點就是chrome瀏覽器版本要和chromedriver版本匹配,由于在官網下載的chrome只有最新的,而chromedriver版本更新沒那么快,想要下載舊版的chrome可以參考https://repo.debiancn.org/pool/main/g/google-chrome-stable/,而對應舊的chromedriver還可以看看這個https://chromedriver.storage.googleapis.com/index.html

  3. 編寫測試腳本
    使用Python編寫測試腳本,使用Selenium提供的API來控制瀏覽器。

  4. 啟動WebDriver
    在腳本中,你需要實例化WebDriver,指定瀏覽器驅動的路徑。

  5. 導航到網頁
    使用WebDriver打開一個網頁。

  6. 執行操作
    使用Selenium提供的API來執行各種操作,比如點擊按鈕、輸入文本、獲取頁面元素等。

  7. 斷言
    在自動化測試中,你需要驗證頁面的行為是否符合預期。

  8. 關閉瀏覽器
    測試完成后,關閉瀏覽器。

下面是一個簡單的示例腳本,演示了如何使用Selenium和Python打開一個網頁并獲取頁面標題:

from selenium import webdriver# 指定WebDriver路徑
driver_path = '/path/to/chromedriver'# 啟動Chrome瀏覽器
driver = webdriver.Chrome(executable_path=driver_path)# 打開網頁
driver.get('http://www.example.com')# 獲取頁面標題
title = driver.title
print('頁面標題:', title)# 關閉瀏覽器
driver.quit()

請確保替換/path/to/chromedriver為你的ChromeDriver的實際路徑,以及將http://www.example.com替換為你想要測試的網頁地址。其中,Selenium不僅可以用于打開網頁和獲取頁面信息,它還可以模擬許多其他的瀏覽器操作。以下是一些常見的操作示例:

  1. 點擊操作
    使用click()方法模擬鼠標點擊。

    element = driver.find_element_by_id('some-id')
    element.click()
    
  2. 輸入文本
    使用send_keys()方法在輸入框中輸入文本。

    input_field = driver.find_element_by_name('username')
    input_field.send_keys('your_username')
    
  3. 獲取和設置Cookie
    使用get_cookies()add_cookie()方法來處理Cookie。

    cookies = driver.get_cookies()
    driver.add_cookie({'name': 'session', 'value': '123456'})
    
  4. 執行JavaScript
    使用execute_script()方法執行JavaScript代碼。

    driver.execute_script('window.scrollTo(0, document.body.scrollHeight);')
    
  5. 切換窗口或框架
    使用switch_to.window()switch_to.frame()方法在不同的窗口或框架之間切換。

    driver.switch_to.window('window_name')
    driver.switch_to.frame('frame_id')
    
  6. 滾動頁面
    使用execute_script()可以滾動到頁面的特定位置。

    driver.execute_script('window.scrollTo(0, 100);')  # 滾動到頁面頂部向下100像素的位置
    
  7. 截屏
    使用get_screenshot_as_file()方法保存當前頁面的截圖。

    driver.get_screenshot_as_file('screenshot.png')
    
  8. 等待元素加載
    使用Selenium提供的WebDriverWaitexpected_conditions來等待某個元素加載完成。

    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as ECelement = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "some-id"))
    )
    
  9. 執行高級用戶交互
    如拖放操作,可以使用動作鏈(ActionChains)。

    from selenium.webdriver import ActionChainsaction = ActionChains(driver)
    action.click(element).perform()
    
  10. 獲取頁面源代碼
    使用page_source屬性獲取當前頁面的HTML源代碼。

    page_source = driver.page_source
    
  11. 執行前進和后退操作
    使用back()forward()方法模擬瀏覽器的前進和后退。

    driver.back()
    driver.forward()
    

這些只是Selenium能做的一小部分事情。Selenium非常靈活,可以模擬幾乎所有的瀏覽器操作,滿足各種自動化測試的需求。最后附上一個完整的自動鏈接網絡腳本

import argparse
import os
import subprocess
import timeimport yaml
from loguru import logger
from selenium import webdriver
from selenium.webdriver.common.by import By  # 導入By類def is_pingable(host="www.baidu.com", timeout=30):try:# 執行ping命令result = subprocess.run(["ping", "-c", "1", host], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True,timeout=timeout)# 檢查返回的結果return result.returncode == 0except subprocess.TimeoutExpired:return Falsedef connect_network(username, password, driver_name="chrome"):# 啟動瀏覽器if driver_name == "chrome":driver = webdriver.Chrome()  # 使用Chrome瀏覽器elif driver_name == "firefox":driver = webdriver.Firefox()  # 使用Firefox瀏覽器else:raise NotImplemented# 打開網頁driver.get("xxxx")# 找到用戶名和密碼輸入框,并輸入信息,這里針對網頁內容按f12進入調試,選擇頁面對應元素的id或者nameusername_input = driver.find_element(By.NAME, "une")password_input = driver.find_element(By.NAME, "pass")username_input.send_keys(username)password_input.send_keys(password)# 找到登錄按鈕并點擊login_button = driver.find_element(By.NAME, "btlogin")login_button.click()# 如果需要等待一段時間,可以使用以下語句driver.implicitly_wait(10)  # 等待10秒鐘# 關閉瀏覽器driver.quit()if __name__ == '__main__':parser = argparse.ArgumentParser(description='Auto Connect Network')parser.add_argument('-c', '--config', type=str, default="config.yaml", help="config path")args = parser.parse_args()with open(args.config, 'r') as file:config = yaml.safe_load(file)username = config['username']password = config['password']interval = config['interval'] * 60test_mode = config['test_mode']driver_name = config['driver']ping_host = config['ping_host']log_name = "network.log"if os.path.exists(log_name):os.remove(log_name)logger.add(log_name, level="INFO")while True:if test_mode or not is_pingable(host=ping_host):logger.info("連接網絡")connect_network(username, password, driver_name)else:logger.info("網絡正常")time.sleep(interval)

其中yaml內容如下,

username: "xxx"  # 用戶名
password: "xxx"  # 密碼
interval: 15  # 檢查間隔時間,默認15分鐘
driver: chrome  # 瀏覽器名稱,僅支持 `chrome`
ping_host: "www.baidu.com"  # 測試網站
test_mode: False  # 測試模式

其中,selenium+chrome還是有一些坑在里面的,你基于上面方法下載的chromedriver你會發現是114老版本的,基于新方法下載的里面沒有chromedriver可執行文件,你運行上面腳本會一直出現找不到chromedriver,即使你配置到相關環境變量中,但是不能解決,這時候在stackoverflow上找到解決問題方法

apt-get install chromium-driverdriver = webdriver.Chrome('/usr/bin/chromedriver')

即可,如果過程中出現AttributeError: ‘str’ object has no attribute 'capabilities’問題,這時候可以試試將selenium的版本降低,最后我這邊嘗試3.14.0版本是可以的

pip install selenium==3.14.0 -i https://pypi.tuna.tsinghua.edu.cn/simple





參考鏈接:
1、https://www.cnblogs.com/fnng/archive/2013/05/29/3106515.html
2、https://github.com/SeleniumHQ/selenium
3、https://blog.csdn.net/diwii/article/details/134541429

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

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

相關文章

汽車免拆診斷案例 | 2021款路虎攬勝運動版車遙控及一鍵起動功能失效

故障現象 一輛2021款路虎攬勝運動版車,搭載AJ20-P6H3L發動機,累計行駛里程約為2.5萬km。車主反映,使用智能鑰匙無法解鎖車門,使用機械鑰匙打開車門,進入車內,發現一鍵起動功能也失效;根據組合…

將excel表格轉換為element table(下)

在‘將excel表格轉換為element table(上)’我們把excel 轉換后通過數據重構綁定到了element table上,現在要做的就是根據源文件進行行列進行合并操作 先看看最終處理的結果 這里在一步步分析實現步驟。 先分析一下合并的邏輯 大致思路理理如上。 思路有了接下來…

回溯法:生成一個字符串的所有排列組合

問題:字符串abcd怎樣獲取abcd、acbd、acdb、adbc、adcb、bacd、bcad、bdac、bdca、cabd、cdba、cadb、cbda等,所有排列。 使用回溯法來生成一個字符串的所有排列 import java.util.ArrayList; import java.util.List;public class Permutations {publi…

雷諾RENAULT EDI 需求分析

雷諾(Renault)是一家法國汽車制造公司,成立于1899年。作為世界知名的汽車品牌,雷諾生產各種類型的車輛,包括乘用車、商用車和電動車。公司總部位于法國布洛涅-比揚古。雷諾以其創新和高質量的產品在全球市場享有盛譽&a…

3-數據提取方法1(json)(6節課學會爬蟲)

3-數據提取方法1(json)(6節課學會爬蟲) 1,Json2,哪里會返回json的數據(值得嘗試的操作)3,Json字符串轉換成字典或python類型進行數據提取(1)Json.…

農夫山泉:玩一個“彎道超車”的“新游戲”

今年夏天,有一款產品的爆火,仿佛上演了一出“歐亨利式”的好戲,既出人意料又在情理之中。它就是農夫山泉的“冰杯”。 在小紅書搜索關鍵詞“冰杯”后,我們會發現,相關筆記達到4萬篇,相關商品超過8000件&am…

基于改進滑模、經典滑模、最優滑模控制的永磁同步電機調速系統MATLAB仿真

微?關注“電氣仔推送”獲得資料(專享優惠) 模型簡介 針對永磁同步電機調速系統的響應性能和抗干擾能力問題,本文做了四個仿真,分別為:永磁同步電機的PID控制調速系統、基于傳統滑模控制的永磁同步電機的調速系統、最…

文件存儲(阿里云OSS)的實現

簡介 文件包括:視頻、音頻、圖片等。我們一般在開發的過程中,會將文件存儲在本地,但是這種情況下會遇到性能的瓶頸、磁盤爆滿等問題。那么我們就需要給文件重新找一個存儲的位置就是云上。此篇介紹阿里云的文件存儲的實現 1、阿里云對象存儲…

Spring Data JPA:全面指南

在現代 Java 開發中,數據持久化是一個關鍵環節。Spring Data JPA 為我們提供了一種簡單而強大的方式來處理數據持久化操作。在這篇文章中,我們將詳細介紹 Spring Data JPA 的基礎知識、配置方法、使用 JpaRepository 進行 CRUD 操作,以及自定…

Mybatis入門の基礎操作

1 Mybatis概述 MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優秀的持久層框架。MyBatis避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以對配置和原生Map使用簡單的 XML 或注解,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的…

# mysql 中文亂碼問題分析

mysql 中文亂碼問題分析 一、問題分析: MySQL 中文亂碼通常是因為字符集設置不正確導致的。MySQL 有多種字符集,如 latin1、utf8、utf8mb4 等,如果在創建數據庫、數據表或者字段時沒有指定正確的字符集,或者在插入數據時使用了與…

Go語言特點、編譯及命令

本文主要分為三部分內容分別為:Go語言的特點介紹;編譯windows、linux環境文件及Go命令。 目錄 Go語言特點 編譯文件 編譯window文件 編譯linux文件 Go命令(build/run/install/env) 編譯文件 直接運行程序 安裝程序 配置G…

互聯網摸魚日報(2024-07-04)

互聯網摸魚日報(2024-07-04) 36氪新聞 用AI創造元宇宙,Meta發布最強3D素材生成模型,一分鐘創造一個世界 比肩Sora!視頻模型王者Gen-3回歸,能表現人類復雜感情,但不理解物理世界 中國半導體設備市場要力挽狂瀾 超3億…

Postman 高級用法學習

Postman 高級用法 Postman 是一款強大的 API 調試和開發工具,廣泛應用于 API 開發、測試、調試和自動化流程中。除了基本的 API 請求發送和響應查看功能,Postman 還提供了許多高級功能。以下是詳細的講解,包括具體示例和操作步驟。 一、環境…

探索金融數據API:現代投資的關鍵工具

在當今快節奏的金融市場中,實時準確的數據對于投資者而言至關重要。金融數據API(Application Programming Interface)成為了投資者獲取和管理數據的核心工具。本文將探討金融數據API的基本概念、用途及其對投資策略的影響。 什么是金融數據A…

PG實踐|內置函數之GENERATE_SERIES之深入理解(二)

📫 作者簡介:「六月暴雪飛梨花」,專注于研究Java,就職于科技型公司后端工程師 🏆 近期榮譽:華為云云享專家、阿里云專家博主、騰訊云優秀創作者、ACDU成員 🔥 三連支持:歡迎 ??關注…

#LinuxC高級 筆記二

makefile gcc gdb makefile 1. 分文件編程 1.1 源文件&#xff1a;.c結尾的文件 包含main函數的.c 包含子函數的.c 1.2 頭文件&#xff1a;.h結尾的文件 頭文件、宏定義、typedef 、結構體、共用體、枚舉、函數聲明 include引用時“”和<>的區別&#xff1a; <>去系…

Java:JDK、JRE和JVM 三者關系

文章目錄 一、JDK是什么二、JRE是什么三、JDK、JRE和JVM的關系 一、JDK是什么 JDK&#xff08;Java Development Kit&#xff09;&#xff1a;Java開發工具包 JRE&#xff1a;Java運行時環境開發工具&#xff1a;javac&#xff08;編譯工具&#xff09;、java&#xff08;運行…

23432443

c語言中的小小白-CSDN博客c語言中的小小白關注算法,c,c語言,貪心算法,鏈表,mysql,動態規劃,后端,線性回歸,數據結構,排序算法領域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 給大家分享一句我很喜歡我話&#xff1a; 知不足而奮進&#xff0c;望遠山而前行&am…

聚四氟乙烯消解管/PTFE四氟消化管/配套各廠家石墨消解儀

四氟消解瓶&#xff0c;通常指的是采用聚四氟乙烯&#xff08;PTFE&#xff0c;也稱為特氟龍或鐵氟龍&#xff09;材料制成的實驗室消解容器。 以下是關于四氟消解瓶的一些基本信息&#xff1a; 材質特性&#xff1a; 四氟消解瓶由PTFE材料制成&#xff0c;具有極佳的耐腐蝕…