基于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.mzph.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;具有极佳的耐腐蚀…