一、后台商品管理自动化测试
步骤分解:
1、后台登陆
1.1打开后台登陆页面
1.2输入用户名(admin)、密码(password)、验证码
1.3点击登陆按钮
2、添加商品
2.1在后台管理中心,点击商品管理
2.2点击添加商品
2.3输入商品名称
2.4选择商品分类
2.5选择商品品牌
2.6点击提交按钮
3、技术实验问题
1、验证码如何处理:(1)通过第三方图片识别文字的工具--准确率比较低
(2)通过第三方网站识别验证码--准确率高,几乎100%,收费
(3)设置万能验证码
(4)在测试环境中屏蔽掉验证码
(5)绑定IP地址
(6)读取cookie和缓存
(7)在输入验证码前,加一个固定时间等待,手动输入验证码
......
2、如何查看系统是否存在万能验证码?
1、明确开发人员的源代码路径,例如 D:phpfindWWWappliaction
2、为了看懂开发人员的代码,必须了解MVC设计模式。M代表模型层,主要用于和数据库打交道,一般有User类(string ID,string name,string email,string passWord),就会有User表,存放很多ID,name,email,passWord这些信息,每当实例化一个User类的对象,就会自动往User表中插入一条数据;V代表视图层,主要和前端界面打交道,用于收集和显示用户数据;C代表控制器controller,主要用于处理业务逻辑,判断验证码是否正确,属于业务逻辑层
3、controller层负责系统所有的业务逻辑,那么如何找到后台登陆功能的源代码?
这时就要分析网址,例如:http://127.0.0.1/index.php?m=admin&c=public&a=login
网址中主要分为五部分:http(协议);127.0.0.1(域名或者IP地址);/index.php(路径);m=admin&c=public&a=login(参数);端口号(当协议是http,并且端口号是80,那么在网址中可以省略;HTTPS的默认端口号是443,也可以省略)
m=admin&c=public&a=login :m是模块的意思,一个模块就是一个文件夹;c是controller的意思,一个控制器就是一个类,一个文件;a是action的意思,一个action就是代码中的一个方法
最终可以查询出来万能验证码1234
4、元素属性存在,但是定位不到,怎么处理?
检查网页中是否存在frame标签,把鼠标放在根节点的标签上
,检查页面高亮部分是否覆盖全屏,脚本
driver.switch_to.frame("frame的name属性名")
5、元素的高级操作
ActionChains中封装了所有对页面元素进行的高级操作
ActionChains(driver) Action是动作行为的意思,Chains是链表的意思,driver代表了当前的浏览器;合起来就是把当前浏览器转换成一个可以执行各种操作的行为链
双击某个元素的操作脚本
ActionChains(driver).double_click(driver.find_element_by_id("7")).perform()
6、css selector (1)copy的方法:右键检查元素,选择copy,再选择copy selector
(2)手动自己书写的方法:标签名可以直接在css selector 中使用
在css中,需要在class属性前面加一个小数点
在css中,需要在ID属性前面加一个#号
在css中,大于号>表示父子关系,例如:父>子
在css中,空格表示祖先元素和子孙元素的关系,例如:祖先 子孙
注意:1如果元素的某个属性是唯一的,那么直接在该属性两边加上中括号,就可以定位该元素
例如:
driver.find_element_by_css_selector('[value="1"]')
2css可以用多个属性组合的方式定位一个元素,例如
driver.find_element_by_css_selector(".a.b.c.d[value='1']")
3各种符号的意义,能改写复制出来的css selector
#表示ID属性
.表示class属性
[]用来表示所有属性 [id="1"] [class='a']
>用来表示父子元素之间的关系 div>input 表示我们要找的input元素有一个父节点是div
标签名前面没有任何符号 a input[value='1']
空格表示祖先和子孙之间的关系 例如 div#id input.class 表示页面中有一个ID="id"的div元素,在该div元素的子孙节点中有一个input标签,该input标签有一个class=‘class’的属性,我们要定位的就是这个input标签
7、如何上传图片?
在前端点击的按钮不是真正负责上传文件的控件,真正负责上传文件的控件是,我们要做就是找到这个控件,然后,直接对这个控件进行send_keys,发送文件或者图片的路径即可
8、遇到报错:element is not attached to the page document报错解决办法
在该报错代码上面加了句time.sleep(),就不再报错



