python+selenium进行简单的自动化

对selenium进行的自动化进行一个简单总结,尽量白话

1、为什么要做自动化

自动化可以做很多事,但是简单来说,就是解放你的手头工作,所以对于懒的人来说,自动化是一个很好的东西。
固定的时间,自动化解放你的双手,你可以做其他的事情
固定的事情,自动化快速执行,能缩短你使用的时间
总而言之,个人对于自动化的理解就是快速,效率
PS:这个地方其实有个比较大的坑
我职业是测试,所以自动化测试面试的时候,会有几个问题:
“你怎么保证你的测试用例的有效性”
“你测试用例代码执行时间你有计算过吗?”
其实延伸一下,你的代码能够执行的更好,首先你需要对需求比较了解,如果你的需求有偏差,代码写得再好,都偏了,这个地方我们只谈代码,所以需求不深入去讲
怎么能够让你的代码运行的更有效率,为什么别人的代码几秒几毫秒就运行完了,你的可能需要几十秒,几秒才能完成?
这个地方就涉及到了资源分配、线程协程、包括你代码中调用的函数,如果相同功能,占用的内存空间更少,是不是就会更好?

2、selenium环境搭建(Chrome为例)

之所以选择selenium是因为这是比较常见的(我没有说是最常见的),所以选择一个先进行使用

要用一个东西,首先你需要搭建环境,百度有很多教程,我这边只给出我当时搭建环境的时候做的备忘,几句话。

  • 安装python环境

  • 安装selenium
    有的人用pip install,我是用的IDE,通过import selenium之后 Alt+shift+enter组合键安装,都可以(此处使用的IDE是pycharm,不是打广告,只是觉得好用)

  • 下载对应版本的驱动
    注意:
    这个地方请特别注意,安装的浏览器版本与selenium的驱动(webdriver)版本需要保持一致(这个地方有个对照表,对照一下,然后下载对应的webdriver就行)

  • 配置浏览器驱动
    首先需要将下载好的对应版本的浏览器安装(就是你要安装一个浏览器)
    其次,将浏览器放入python的根目录
    最后,最好重启电脑(好像不重启也没事,如果有问题,先重启试一下,毕竟重启能解决90%的问题。。。。。。)

3、原理

上个图吧
python+selenium进行简单的自动化
简单说一下:
selenium1.0 = Selenium IDE + Selenium Grid + Selenium RC
Selenium RC = Client Libraries + Selenium Serve
Selenium Clinet用于编写测试脚本, Selenium Server用来控制浏览器行为

selenium 2.0 = Selenium 1.0 + Webdriver
注意:是兼容1.0版本的
这个时候,对应不同的浏览器,就会使用不用的驱动,例如Chrome就是chromedriver

selenium 3.0 = selenium 2.0 - selenium RC

所以联系上图,selenium通过webdriver操作浏览器,其实是相当于webdriver做了一个中间人,人写脚本,脚本通过webdriver去操作浏览器

这个地方延伸一下:appium
appium是APP端的自动化(注意,这里说的是APP端,不是Android端,不是iOS端,也就是说,他是同时支持ios和Android的自动化的),selenium的web端的自动化
appium继承了webdriver(也就是selenium2)
python+selenium进行简单的自动化

4、selenium定位方式

一般我们习惯说“八大定位方式”,这里的意思是说,这8种比较常用,实际上的定位方式不止8种
id
class
name
xpath
css
link
partial_link
tag
具体意思以及使用,自己百度,不做详细介绍,只说一下使用情况。
id
首先,最好用的是id,因为id是唯一的,我们在元素定位的时候就是要找出唯一的元素,这样才知道操作哪里,id具有唯一性,所以id是最好用的
缺点:不是处处有id,很多时候,前端人员并不会在你需要操作的元素那里去标明id,所以导致你没有id可以用
其次就是class、name
都是不唯一的,但是定位元素简洁,所以一般优先级也比较高,包括class还有复合类定位,比较麻烦,所以当他是唯一的时候,你就去使用,不是唯一的,就换种方式
Xpath
Xpath其实就是某一个元素的代码路径,多少个div,第多少个,类似这种,Chrome浏览器在这个地方可以直接copy Xpath,对新手极度友好
缺点:后期维护量大
Xpath是元素的前端代码层级路径,那么只要代码有修改这个路径中的任何一个地方,你的路径也要重新获取
且这种定位元素的路径一般较长,所以就比较复杂
CSS
和Xpath类似,比Xpath简洁,学习起来会较难理解,也能通过copy得到,个人习惯使用Xpath,不做过多介绍
link,partial_link,tag
link是定位文本链接的,全部文本
partial_link也是定位文本链接的,部分文本
tag,定位前端标签,如input(输入框),button(按钮)等
没什么好讲的,看代码就明白了

统一使用find_element_by_定位方式()

5、上手代码进行定位

(后面补,反正百度也能查到,有人看的话,这部分我的代码不重要)

6、遇到过的情况
①、表单定位
②、句柄

7、常见的api
最常见的界面上就是输入和点击的操作
点击:click()
输入:send_key(“值”)
再后面需要更多的操作就比如鼠标(滑动下拉框等)、键盘操作了,这部分百度能查到,用多了就记住了,留坑后期补,如果有人想看这部分,可以提醒我一下

8、见过的提的问题
(记录一下,我还没自己实践,写出来,如果有兴趣就可以自己了解一下,后期自己实践了就补上,希望没忘记就好)
①:怎么对图片进行定位,或者给你一个情景,你的操作过程中,需要选择图片进行上传,你怎么做?

②:对于有动态验证码登录的情况,怎么写自动化
答、这个地方一般让开发提供一个固定的验证码,或者暂时将验证码的部分关闭

selenium,其实基础部分就了解到定位方式以及常用的api就行
然后你在实际使用的过程中,都会遇到问题,再去解决问题,就可以了,没有多复杂,我当时还是看了一段时间,基础不好,大佬说看一下,半个小时还是半天就能学懂,足以说明其实还是比较简单的
学东西花点时间,事后节约你更多的时间,何乐而不为?