【测试开发八股文】selenium

1、Selenium有几种定位方式?你最偏爱哪一种,为什么?
Selenium有八种定位方式:

与name有关的有三种:
name:元素名称
class_name:元素类名
tag_name:元素标签(不推荐,重复率太高)
与link相关的有两种:
link_text:文本链接
partitial_link_text:文本链接的一种补充
与id有关:
id:元素唯一的id
全能选手:
xpath:相对/绝对路径
css_selector:css定位
如果存在元素唯一id,则使用Id,因为简单方便,定位最快。其次,是Xpath,因为很多情况下html标签的属性不够规范,无法唯一定位,Xpath是通过相对位置定位

元素定位方法:
在这里插入图片描述
元素操作:

找到元素后可以对元素进行的操作,例如上面讲的进一步定位元素

click()
// 点击操作,也可以用tab实现点击操作
driver.find_element_by_id(“com.wuba.zhuanzhuan:id/ae8”).click()

clear()
// 清空输入框内容
driver.find_element_by_id(“com.wuba.zhuanzhuan:id/ij”).clear()

send_keys(xx)
// 输入框内输入内容
driver.find_element_by_id(“com.wuba.zhuanzhuan:id/ij”).send_keys(“test content”)

text
// 获得元素的text内容
print(driver.find_element_by_xpath(" //android.widget.LinearLayout[1]//xxx").text)

2、xpath定位
在这里插入图片描述

3、webdriver client 工作原理
webDriver是按照client/server模式设计的,其中client是我们的测试脚本,发送请求;server就是打开的浏览器,用来接收client的请求并作出响应,即server接受请求并执行相应操作,并在response中返回执行状态、返回值等信息

注:在selenium启动以后,driver充当了服务器的角色,跟client和浏览器通信,client根据webdriver协议发送请求给driver。driver解析请求,并在浏览器上执行相应的操作,并把执行结果返回给client.

具体工作流程:

1)webDriver启动浏览器后,将目标浏览绑定到指定端口,其中启动的浏览器作为远程服务器remote server
2)client通过CommandExecuter发送http请求给远程服务器的侦听端口(the wire protocal)
3)server端(远程服务器)根据原生的浏览器组件,转化webserver的命令为浏览器native的调用来完成操作

web Driver用到的协议:

打开浏览器时:HTTP协议
client端发送http请求到远程服务器的侦听端口:the wire protocol
其中

有线协议:指的是从点到点获取数据的方式,是应用层的协议。
HTTP协议:是用于从服务器传输超文本标记语言HTML到客户端的通信协议。是一个应用层协议,由请求/响应构成,是一个标准的客户/服务器模式。是一个无状态的协议。(无状态:对事务没有记忆能力,不会保存这次传输的信息——节约内存)
4、如何去定位属性动态变化的元素?
属性动态变化是指该element没有固定的属性值,所以只能通过相对位置定位,比如通过xpath的轴, parent/following-sibling/precent-sibling等,另外也可以尝试findbyelements遍历

5、点击链接以后,selenium是否会自动等待该页面加载完毕?
不会的。所以有的时候,当selenium并未加载完一个页面时再请求页面资源,则会误报不存在此元素。所以首先我们应该考虑判断,selenium是否加载完此页面,其次再通过函数查找该元素。

6、自动化测试的时候是否需要连接数据库做数据校验?
一般来说

UI自动化不需要(很少需要);
接口测试会需要:从数据库层面来进行数据校验可以更方便验证系统的数据处理方面是否正确;
7、selenium怎么判断元素是否存在?是否出现
1)是否存在

判断元素是否存在和是否出现不同, 判断是否存在意味着如果这个元素压根就不存在, 就会抛出NoSuchElementException
这样就可以使用try catch,如果catch到NoSuchElementException 就返回false。通常在项目中会把这个功能封装在isElementPresent方法中
2)是否出现

判断元素是否出现,存在两种情况,一种是该元素压根就没有,自然不会出现;另外一种是有这样的元素,但是是hidden状态
可以通过先判断是否存在,如果不存在返回false;如果存在再去判断是否displayed
8、selenium中hidden或display=none的元素是否可以定位到?隐藏元素如何定位?(hidden、display: none)
不能,想点击的话,可以用js去掉dispalay=none的属性

元素隐藏的两种 方式:type=“hidden” 和 style=“display: none;” 属性

共同点:都把网页中的元素给隐藏起来了;在selenium中无法直接定位
区别:
none:不为隐藏的对象保留其物理空间, 看不见/摸不着
hidden:仍占有空间,看不见/摸得着
9、PageObject设计模式
概念:什么叫pageobject?
PageObject就是页面对象,Selenium自动化测试项目开发实践的最佳设计模式之一。
简单来说,就是把页面作为对象,在使用中传递页面对象,来使用页面对象中相应的成员或者方法,能更好的体现面向对象语言(比如java或者python)的面向对象和封装特性。
pageobject原理
将页面的元素定位和元素行为封装成一个page类, 实现页面对象和测试用例分离。
PageObject分层
对象库层:对象层用于存放我们的页面元素和一些特殊控件操作
逻辑层:逻辑层则是一些封装好的功能用例模块
业务层:测试用例的操作;
数据层:存放我们的测试数据;
优点
集中管理元素对象,便于应对元素的变化
集中管理一个page内的公共方法,便于测试用例的编写
后期维护方便,不需要重复的复制和修改代码

  • 23
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值