Python+Selenium UI自动化测试环境搭建及使用

news2024/11/23 7:04:25

目录

一、什么是Selenium ?

二、Selenium环境搭建

三、WebDriver API

总结:


一、什么是Selenium ?

Selenium 是一个浏览器自动化测试框架,它主要用于web应用程序的自动化测试,其主要特点如下:开源、免费;多平台、浏览器、多语言支持;对web页面有良好的支持;API简单灵活易于使用;支持分布式测试用例执行。

Selenium经历了两个版本,Selenium1.0和2.0,Selenium1.0主要由以下几部分构成:

  • Selenium IDE:是一个嵌入到Firefox中的插件,可以实现浏览器的录制于回放功能。

  • Selenium Grid:自动化测试辅助工具,可以很方便地同时在多台机器上并行运行多个测试事例。

  • Selenium RC:是Selenium的核心工具,支持多种不同的语言编写的测试脚本,通过Selenium RC的服务器作为代理服务器去访问应用从而达到测试的目的。主要分为以下两部分:

   1.Client:用来编写测试脚本来控制Selenium server的库。

   2.Server:负责控制浏览器的行为,包含三部分:Launcher;HttpProxy;Core。

明白了Selenium1.0的家族关系,Selenium2.0可以简单的认为是将WebDriver加入到了Selenium RC这一部分中去。那么Selenium RC和WebDriver有什么区别呢? RC和 WebDriver 类似,都可以看做是一套操作web页面的规范。当然,他们的工作原理不一样。

  • Selenium RC 在浏览器中运行 JavaScript 应用,使用浏览器内置的 JavaScript 翻译器来翻译和执行selenese 命令(Selenium 命令集合) 。WebDriver 通过原生浏览器支持或者浏览器扩展直接控制浏览器。

  • WebDriver 针对各个浏览器而开发,取代了嵌入到被测 Web 应用中的 JavaScript。与浏览器的紧密集成支持创建更高级的测试,避免了JavaScript 安全模型导致的限制。除了来自浏览器厂商的支持,WebDriver 还利用操作系统级的调用模拟用户输入。

selenium自动化测试视频教程:2023最新的Selenium自动化测试实战,没有比这个更详细的了_哔哩哔哩_bilibiliicon-default.png?t=N5F7https://www.bilibili.com/video/BV1xv4y1D7ku/?spm_id_from=333.999.0.0

 

二、Selenium环境搭建

1.安装python

python的安装此处就不细说,去python官网下载地址,下载对应的python版本安装,注意环境变量的配置。

2.安装Selenium

使用pip 命令安装 selenium pip install selenium , Mac电脑 安装过python3 使用pip3 install selenium 来安装。

3.安装浏览器驱动 

使用chrome浏览器,需要下载对应版本的chromedriver 

4.安装上述工具后,可以测试下环境是否正常,使用以下这段代码

# -*- coding:utf-8 -*-

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("http://baidu.com")

driver.close()

浏览器能正常打开百度,那么环境安装是正常的

三、WebDriver API

      1.定位元素

  • 通过id属性来定位元素(id属性在html文档中必须具有唯一性)

  find_element_by_id()方法

  • 通过name属性来定位元素(name属性在当前页面中)

  find_element_by_name()方法

  • 通过class属性来定位元素

  find_element_by_class_name()方法

  • 通过tag来定位元素

  find_element_by_tag_name()方法

  • 通过link元素标签对之间的文本信息来定位元素

  find_element_by_link_text()方法

  • 通过partial link定位元素,和link类似,只不过是部分文本信息来进行定位

  find_element_by_partial_link_text()方法

  • find_element_by_xpath()方法

  绝对路径来定位:

find_element_by_xpath('/html/body/.........')

  文本框:

find_element_by_xpath("/html/body/div[2]/div[1]/div/div[1]/div/form/span[1]/input")

  • 通过CSS定位元素

1.通过id属性定位元素

文本框:

find_element_by_css_selector("#kw")

  按钮:find_element_by_css_selector("#su")

2.通过class属性定位元素

文本框:

find_element_by_css_selector(".s_ipt")

  按钮:find_element_by_css_selector(".bg s_btn")

3.通过其他属性值来定位元素

文本框:

find_element_by_css_selector("[name = 'wd']")

find_element_by_css_selector("[maxlength = 255]")

find_element_by_css_selector("[autocomplete = 'off']")

1.控制浏览器

 控制浏览器窗口大小:

driver=webdriver.Firefox()

#设置窗口大小为x,y

driver.set_window_size(x,y)

#最大化窗口

driver.maxmize_window()

2.元素操作

  当我们获取了元素之后,还要对其进行操作,如点击按钮、输入文字、提交表单等。大多数页面交互的方法通过WebElement接口提供,常用的有:

  • clear() 清除文本框中的文本

  • send_keys(*value) 模拟按键输入

  • click() 单击元素 这几个方法很简单,很方便使用。 submit() 用于提交表单,例如搜索框中的提交按钮。比如我们可以用如下代码直接输入搜索的关键字后用submit()提交,而不用获取搜索按钮再点击。

driver.find_element_by_css_selector("#kw").send_keys("selenium2").submit()

       还有几个常用的方法:

  • size() 获取元素的大小尺寸

  • text()获取元素的文本

  • is_displayed()元素是否可见

  鼠标、键盘事件

  模拟鼠标右键、双击、悬停、拖拽等操作,会用到ActionChains类。

  selenium.webdriver.common.action_chains.ActionChains(driver)当调用ActionChains的方法时,不会立即执行,而是会将所有的操作按顺序存放在一个队列里,当你调用perform()方法时,队列中的时间会依次执行。

  ActionChains方法列表:

click_and_hold(on_element=None) ——点击鼠标左键,不松开

context_click(on_element=None) ——点击鼠标右键

double_click(on_element=None) ——双击鼠标左键

drag_and_drop(source, target) ——拖拽到某个元素然后松开

drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开

key_down(value, element=None) ——按下某个键盘上的键

key_up(value, element=None) ——松开某个键

move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标

move_to_element(to_element) ——鼠标移动到某个元素

move_to_element_with_offset(to_element, xoffset, yoffset) ——移到距某个元素(左上角)多少距离的位置

perform() ——执行链中的所有动作

release(on_element=None) ——在某个元素位置松开鼠标左键

send_keys(*keys_to_send) ——发送某个键到当前焦点的元素

send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素

设置等待时间

  • 显示等待:主要使用的类和方法:WebDriverWait、uitil\until_not、Expected Conditions。

  • 隐式等待: implicitly_wait

其他操作 还有其他一些操作如:上传下载文件、操作cookie、验证码的处理等等操作还没有用到过,用到的时候再去学习就好了。 熟练使用以上的各部分,可以写出各种常用的脚本,我们算是入门Selenium了。

总结:

感谢每一个认真阅读我文章的人!!!

我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。欢迎大家点击下方名片免费领取,千万不要错过哦。

  Python自动化测试学习交流群:全套自动化测试面试简历学习资料获取点击链接加入群聊【python自动化测试交流】:http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=DhOSZDNS-qzT5QKbFQMsfJ7DsrFfKpOF&authKey=eBt%2BF%2FBK81lVLcsLKaFqnvDAVA8IdNsGC7J0YV73w8V%2FJpdbby66r7vJ1rsPIifg&noverify=0&group_code=198408628

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/650854.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

缅怀(上次写博客是2009年10月24日)

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

Nucleo-F411RE (STM32F411)LL库体验 3 - 滴嗒定时器的配置

Nucleo-F411RE (STM32F411)LL库体验 3 - 滴嗒定时器的配置 1、LL库延时 LL库初始化时钟的时候调用了LL_Init1msTick(100000000)函数,这个函数其实就是初始化了系统的滴答定时器。 LL_InitTick原型如下: load值 sysclk/1000&a…

RocketMQ架构和工作流程

一.MQ概述 1.简介 MQ,Message Queue,是一种提供消息队列服务的中间件,也称为消息中间件,是一套提供了消息生产、存储、消费全过程API的软件系统。消息即数据。一般消息的体量不会很大。 2.用途 限流削峰 MQ可以将系统的超量请求…

接口测试工具怎么选?这个技巧你一定要知道

目录 前言 一、易用性 二、灵活性 三、可靠性 测试用例 接口测试数据 自动化测试 测试报告 总结 前言 当今软性开发中,接口测试已成为必不可少的一环,该如何选择接口测试工具?选择合适的接口测试工具对于程房员来说非常重要,因为…

SQL死锁

前言: 使用脚本刷数据时,开多线程经常遇到死锁现象,面试也经常问到,故开此篇 日志错误示例: ### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Deadlock fo…

Tplink企业版开启ipv6

Tplink企业版开启ipv6 1、登录路由器 路由器的默认地址一般为:192.168.0.1,登录成功后如下图: 2、WAN设置ipv6 wan是设置启用ipv6模式,如果这里无法启用,主要是因为“接口模式”中启用了桥接模式,可以关闭…

多线程详解

多线程详解 Process和Thread 程序是指令和数据的有序结合,其本身没有任何运行的含义,是一个静态的概念 进程是执行程序的一次执行过程,是一个动态的概念,是系统资源分配的单位 通常在一个进程中可以包含若干个线程。线程是CPU调…

(数组) 922. 按奇偶排序数组 II ——【Leetcode每日一题】

❓922. 按奇偶排序数组 II 难度:简单 给定一个非负整数数组 nums, nums 中一半整数是 奇数 ,一半整数是 偶数 。 对数组进行排序,以便当 nums[i] 为奇数时,i 也是 奇数 ;当 nums[i] 为偶数时&#xff0c…

开发语言的更新换代,都是为了更好地提高生产力,Kotlin也是如此~

作为一名Android开发,学习Kotlin是很有必要的。以下是一些原因: 1.Kotlin是官方支持的语言。 在2017年Google宣布支持Kotlin作为官方开发语言后,Kotlin已成为Android生态系统的重要组成部分。此举表明Kotlin的发展前景非常广阔,…

uniapp兼容多pda扫描扫码

前景 网上有现成的针对单个pda扫码录入的代码,但是公司的需求是在多个不同厂商pda上运行,这就会导致不同的pda默认的广播动作和广播标签不一致的情况,目前也没有获取这俩字段的api。 单个pda扫描扫码代码 先创建一个scanCode.js的文件 le…

UnoCSS给了我一个不用tailwindcss的理由

相同的原由 & 前言 如果你没有听说过 tailwindcss 或者 unocss,请先 return 先去了解一下😝。 开发上:可能为你甚至你们的前端团队节省很多写样式的时间,也能让你或者你们的项目开发体验有很大提升生产上:你们的…

VS2013创建一个MFC工程的步骤

目录 1、新建项目,选择”MFC应用程序“; 2、应用程序类型,选择“基于对话框”; 3、对话框的标题,默认是和项目的名字一致,按需修改; 4、高级功能,可以保持默认; 5、…

一个女测试工程师的大厂日常

今天给大家分享两个朋友的故事,他们分别在国内两家顶尖的互联网大厂,一个在头条,一个在蚂蚁。 头条的故事 头条的主人公,在入职后的一年里,晚上十点半下班是比较早了,基本上都是十一点半左右下班&#xff…

低成本开发专属小程序支持自定义开发设计

传统定制开发小程序成本高,还需要不断地沟通和交流才能一步步地去实现你想要的功能和效果,那么除了传统的定制开发小程序外,用户其实还可以选择使用模板开发小程序,不仅能实现小程序的所有基础功能,还不用编程维护和开…

进程的描述与控制

文章目录 前趋图和程序执行前趋图程序顺序执行程序并发执行 进程引入目的进程的描述进程的定义进程的特征进程的基本状态与转换挂起操作和进程状态的转换挂起操作引入引入挂起操作后进程3个基本状态间的转换引入挂起操作后进程5个基本状态间的转换进程管理中的数据结构OS中用于…

antdb-upgrade大版本升级介绍

antdb-upgrade pg_upgrade 是postgresql 大版本升级的得力工具。 数据库系统数据部分通过 new version的pg_upgrade自动升级完成数据库用户数据部分,主要有两种用法: 使用pg_upgrade copy物理拷贝方式升级(非copy to/copy from逻辑拷贝)。使用pg_upgra…

内网渗透—隧道搭建SPP与NPS内网穿透

内网渗透—隧道搭建&SPP与NPS内网穿透 1. 前言2. SPP2.1. SPP代理通信2.1.1. 服务端配置2.1.2. 客户端配置2.1.3. CS设置2.1.3.1. 设置生成的监听器2.1.3.2. 设置监听的监听器 2.1.4. 执行效果 2.2. SPP隧道建立2.2.1. 服务端设置2.2.2. 客户端配置2.2.3. CS设置2.2.3.1. 设…

Mybatis学习笔记三

目录 一、MyBatis的缓存1.1 MyBatis的一级缓存1.2 MyBatis的二级缓存1.3 二级缓存的相关配置1.4 MyBatis缓存查询的顺序1.5 整合第三方缓存EHCache(了解) 二、MyBatis的逆向工程2.1 创建逆向工程的步骤2.2 简单使用查询增改 三、 分页插件3.1 分页插件使…

Endnote解决文章题目Title大小写问题,以及专有名词保持全部大写

在写毕业论文或综述类文章时,需要添加大量参考文献(100左右或更多),而每个期刊的要求是不一样的,因此手动输入或修改参考文献的格式是愚蠢的(狗头保命),所以需要强大的endnote来进行…

一篇博客搞定C++11之Lambda表达式(附案例代码+解析)

Lambda表达式 1.lambda表达式语法2.捕获列表说明3.lambda表达式实现原理4.具体案例5.总结 1.lambda表达式语法 ambda表达式的语法非常简单,具体定义如下: [ captures ] ( params ) specifiers exception -> ret { body } 先不用急于解读这个定义&…