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、原理

上个图吧
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)
在这里插入图片描述

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、三种等待

  • 强制等待:sleep(时间)
    固定等待设置的时间,时间单位:秒
    优点:简单
    缺点:
    ① 在设置时间内浏览器没有完成加载,就会报错
    ② 如果时间设置的比较长,当用例较多时,会增加用例执行时间
  • 显性等待
    WebDriverWait(driver, 超时时间, 调用频率, 要忽略的异常).until(要执行的方法, 超时时返回的错误信息)
WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator))  

20:最长等待时间。
0.5:检查间隔时间,每隔0.5秒检查一次操作是否完成。
EC.presence_of_element_located(locator):判断目标元素是否已经成功加载。
忽略异常:如果在调用until或until_not的过程中抛出这个元组中的异常,则不中断代码,继续等待,如果抛出的是这个元组外的异常,则中断代码,抛出异常。默认只有NoSuchElementException。

优点:等待判断准确,不会浪费多余的等待时间,在用例中使用,可以提高执行效率
缺点:复杂

  • 隐性等待:implicitly_wait(X)
    设置一个最长等待时间,改时间内加载完成则执行后面代码,若失败,则报错
    优点:隐性等待对整个driver的周期都起作用,所以只要设置一次即可
    缺点:使用隐式等待,程序会一直等待整个页面加载完成,才会执行下一步操作;

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

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值