Selenium的学习

news2024/9/24 11:26:21

介绍下学习selenium的经验。之前有网友要求我给布置作业,那么我整理一下就全部列在这里。每一步给出一个小题目。

selenium是一个比较古老也比较流行的自动化测试库。他的特点是,版本较多,以至于在网上搜到很多教程都是过时的。

一、Selenium的家族成员

Selenium1:最老的,基于javscript实现的自动化测试框架。新项目上已经没什么人会选择这个了。又叫Selenium RC。
Selenium2:又叫Selenium Webdriver。从这里开始selenium和webdriver两个开源项目合并了。

Selenium3:2的后续。3和2有一些细微的不同。值得一提的是,Selenium2里firefox浏览器的driver不需要单独下载什么东西,直接能用。而到了3需要下载geckodriver才能用。这也是为什么你按照2的教程做会报错。“geckodriver executable needs to be in path” 这个错误是日常问题。
SeleniumIDE:录制回放工具,不用学。

SeleniumGrid:分布式执行selenium的框架。坑多效率低。初学者不用看。

Webdriver:对每个浏览器,有一个本地driver用来驱动他。这个所谓本地driver可能是一个独立的exe文件。

二、糟糕的官方教程

Selenium的官方网站和老版官方教程,让人摸不着头脑。但是,现在有新的官方教程了:http://seleniumhq.github.io/docs/ 也可以从selenium的github readme文件里进入。这个教程简洁多了。

但是,这个教程最大的问题是,有的地方用python,有的地方用java,有的地方又用ruby,令人无所适从。稍后我会整理一下其中python系需要的部分。而java系以前就有一本很好的selenium testing tools cookbook.

三、从写一个最简单的脚本开始

这里假设你已经顺利搭建了selenium的开发环境和已经初步掌握python的unit test库。

首先,不用unittest库,只用纯python+selenium尝试编写一个脚本。用selenium打开浏览器,进入一个网站比如百度,去搜索某个关键字,比如搜一下selenium。

不知道怎么用selenium启动浏览器?官网教程有例子:

以上只需要把谷歌改成百度。把定位语句里的id改一改。再把搜索关键字改一改。

四、给这个脚本加上断言

需要给一个脚本加上assert断言,这个脚本才能变成一个测试脚本。也就是在执行后知道结果是成果还是失败。

五、把这个脚本放到unittest里执行

至此,一个最最简单的测试脚本完成了。

六、安装firebug,firepath

做复杂的脚本之前,先安装firebug和firepath。这是两个firefox插件。可以帮助你在前期快速写出xpath定位语句。

七、挑战一个教复杂的脚本
自己设计一个较复杂的测试场景,并用脚本实现。比如,打开豆瓣电影,测一下前5本电影的片名和导演名字。(预期结果可以写在某个文本文件里或直接写死在脚本里。)这个可以尝试改写成数据驱动形式的测试用例。

八、重构这个脚本,使用页面对象模式

上面做的脚本太长,而且非常不好维护,完全无法重用。所以才会有页面对象这种专门给selenium搞的设计模式。但是我不确定你能不能在网上找到python实现的例子,java的倒是很多。我之前也做过一个http://github.com/zhangting85/simpleWebtest 是我在某个公司写的框架的简化版。并且写了好多篇对应的博客来介绍我当时是怎么写的。但同样的问题就是这些教程很容易过时。时隔三四年,这样的一个小框架很有可能有各种问题。所以也只能当作参考。有空我可能把它重写成python的。

九、试试把unittest换成RobotFramework

robotframework是一个关键字驱动测试框架。这一步并不是说robotframework就比unittest高级,但读者可以试试用robot。这个框架还是有一定程度上的优点的,也有缺点。

至此,如果这些小题目都完成了,那基本上就算入门了。在写这篇文章的时候,顺便找了一圈python的selenium资料,可惜没看到比较好的。有空我再写点吧。

遇到问题了?

不懂怎么定位元素的,请看w3c school里的xpath教程。并结合使用firepath工具。

元素怎么也定位不到?

1.看有没有frame,2.尝试actions操作,3.让selenium调用原生js搞定。

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

 全套资料获取方式:点击下方小卡片自行领取即可

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

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

相关文章

lightGBM实例——特征筛选和评分卡模型构建

数据还是采用这个例子里的数据,具体背景也同上。 添模型构建——使用逻辑回归构建模型,lightGBM进行特征筛选 lightGBM模型介绍请看这个链接:集成学习——Boosting算法:Adaboost、GBDT、XGBOOST和lightGBM的简要原理和区别 具体代…

65. 有效数字

题目链接:力扣 解题思路:从前往后挨个进行有效判断,注意其中e或E和小数点只能出现一次,具体算法如下: 初始变量: i 0:遍历指针dotfalse:标记小数点是否已经出现E false&#xff1a…

以智慧监测模式守护燃气安全 ,汉威科技“传感芯”凸显智慧力

城市燃气工程作为城市基建的重要组成部分,与城市居民生活、工业生产紧密相关。提升城市燃气服务质量和安全水平,也一直是政府和民众关注的大事。然而,近年来居民住宅、餐饮等工商业场所燃气事故频发,时刻敲响的警钟也折射出我国在…

浅浅了解下单例模式中的懒汉模式饿汉模式

单例模式 1.什么是设计模式2.什么是单例模式3.常见实现单例模式的两种方式1.饿汉模式(1)特点(2)代码实现(3)线程是否安全 2.懒汉模式(1)特点(2)代码实现(3)线程是否安全(4)如何保证线程安全解决方案:进阶方案 3.对比懒汉模式和饿汉模式1、线程安全2、是否延迟加载3、系统开销4、…

QMainWindow

文章目录 QMainWindow基本元素QMainWindow函数介绍简单的示例效果图 QMainWindow QMainWindow是一个为用户提供主窗口程序 的类,包含一个菜单栏(menu bar)、多个工具栏 (tool bars)、多个锚接部件(dock widgets)、―个 状态栏(status bar )及一个中心部件(central …

【算法提高:动态规划】1.2 最长上升子序列模型(TODO最长公共上升子序列)

文章目录 题目列表1017. 怪盗基德的滑翔翼1014. 登山482. 合唱队形1012. 友好城市(⭐排序后 最长上升子序列模型)1016. 最大上升子序列和1010. 拦截导弹解法1——最长递减子序列 贪心解法2——最长递减子序列 最长递增子序列(⭐贪心结论&am…

K8s集群部署-详细步骤

不够详细,后面有时间再编辑 安装 关闭防火墙 systemctl stop firewalld systemctl disable firewalld 关闭swap, selinux swapoff -a && sed -i / swap / s/^\(.*\)$/#\1/g /etc/fstab setenforce 0 && sed -i s/^SELINUX.*/SELINUXdisabled/ /…

Safari 查看 http 请求

文章目录 1、开启 Safari 开发菜单2、显示 JavaScript 控制台 1、开启 Safari 开发菜单 Safari 设置中,打开开发菜单选项 *** 选择完成后,Safari 的目录栏就会出现一个 开发 功能。 2、显示 JavaScript 控制台 开启页面后,在开发中选中 显…

Android 之 动画合集之补间动画

本节引言: 本节带来的是Android三种动画中的第二种——补间动画(Tween),和前面学的帧动画不同,帧动画 是通过连续播放图片来模拟动画效果,而补间动画开发者只需指定动画开始,以及动画结束"关键帧"&#xff0…

提示计算机丢失MSVCP140.dll怎么办?这三个修复方法可解决

最近在使用电脑的过程中,遇到了一个问题,即缺少了MSVCP140.dll文件。这个文件是一个动态链接库文件,常用于Windows操作系统中的应用程序中。由于缺少这个文件,会导致计算机系统无法运行某些软件或游戏。丢失MSVCP140.dll可能是由于…

【技术分享】oracle数据库相关操作

-- 截断表 TRUNCATE TABLE TABLE_NAME;-- 删除表 DROP TABLE TABLE_NAME;-- 查询表 SELECT * FROM TABLE_NAME;-- 添加一条记录 INSERT INTO TABLE_NAME(COLUMN) VALUES(VALUE);-- 删除记录 DELETE FROM TABLE_NAME WHERE COLUMNVALUE;-- 修改记录 UPDATE TABLE_NAME SET…

Android性能优化之Thread native层源码分析(InternalError/Out of memory)

近期处理Bugly上OOM问题,很多发生在Thread创建启动过程,虽然最后分析出是32位4G虚拟内存不足导致,但还是分析下Java层Thread 源码过程,可能会抛出的异常InternalError/Out of memory。 Thread报错堆栈: Java线程创建…

数据库|手把手教你成为 TiDB 的 Contributor

一、背景 最近笔者在 AskTUG 回答问题的时候发现,在 6.5.0 版本出现了几个显示未启动必要组件 NgMonitoring 的问题贴。经过排查发现,是 ngmonitoring.toml 中的配置文件出现了问题。文件中的 endpoints 应该是以逗号分隔的,但是却写成了以空…

JavaWeb 项目实现(二) 注销功能

3.注销功能 接前篇,实现了登录功能之后,现在实现注销功能。 因为我们实现登录就是在Session中记录了用户信息。 所以注销功能,就是在Session中移除用户信息。 代码:删除Session中的用户信息,跳转登录页面 package…

【安全渗透】第一次作业(编码知识总结)

目录 1. ASCII编码 2、Unicode 3、UTF-8 1. ASCII编码 ASCII 是“American Standard Code for Information Interchange”的缩写,翻译过来是“美国信息交换标准代码”。ASCII 的标准版本于 1967 年第一次发布,最后一次更新则是在 1986 年&#xff0c…

QEMU源码全解析13 —— QOM介绍(2)

接前一篇文章:QEMU源码全解析12 —— QOM介绍(1) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM》源码解析与应用 —— 李强,机械工业出版社 特此致谢! 本回开始对QOM…

django学习笔记(1)

django创建项目 先创建一个文件夹用来放django的项目,我这里是My_Django_it 之后打开到该文件下,并用下面的指令来创建myDjango1项目 D:\>cd My_Django_itD:\My_Django_it>"D:\zzu_it\Django_learn\Scripts\django-admin.exe" startpr…

记录每日LeetCode 2500.删除每行中的最大值 Java实现

题目描述: 给你一个 m x n 大小的矩阵 grid ,由若干正整数组成。 执行下述操作,直到 grid 变为空矩阵: 从每一行删除值最大的元素。如果存在多个这样的值,删除其中任何一个。 将删除元素中的最大值与答案相加。 …

Reinforcement Learning with Code 【Chapter 7. Temporal-Difference Learning】

Reinforcement Learning with Code This note records how the author begin to learn RL. Both theoretical understanding and code practice are presented. Many material are referenced such as ZhaoShiyu’s Mathematical Foundation of Reinforcement Learning, . 文章…

Linux内核与内核空间是什么关系呢?

对内核空间的认识清晰了许多。要理解用户空间与内核空间需要有如下的几个认识: 内核的认识:从2个不同的角度来理解,一个是静态的角度,如“芦中人”所比喻,内核可以看做是一个lib库,内核对外提供的API打包…