自动化测试-UI

一.自动化中有那三类等待?他们有什么特点?

  1. 线程等待(强制等待)如time.sleep(2) 线程强制休眠两秒,2秒后,在执行后续的代码。建议少用
  2. imlicitlyWait(隐式等待)会在指定的时间范围内不断地查找元素,直到找到元素或超时,特点是必须等待整个页面加载完成。
  3. WebDriverWait(显示等待)通常是我们自定义的一个函数代码,这段代码用来等待某个元素加载完成,再继续执行后续的代码。
  • 相同点:
    都是智能等待,在一定时间范围内不断查找元素,一旦找到立刻结束查找继续执行代码,没找到才会一直找到超时为止
  • 不同点:
    隐式等待是全局性设置,并且可以随时更改,在更改后对之后的findxxx方法生效,对点击、输入、滑动之类的操作不起作用;
    显式等待仅仅针对单一元素或一组生效,并且不仅仅是针对查找,还可以针对弹框或者frame等特殊情况起作用,也可以针对元素的某些属性进行自定义判断

二.Selenium中的定位方式

  1. id:根据id来获取元素,返回单个元素,id值一般是唯一的;
  2. name:根据元素的name属性定位;
  3. tagName:根据元素的标签名定位;
  4. className:根据元素的样式class值定位;
  5. linkText:根据超链接的文本值定位;
  6. partiaLinkText:根据超链接的部分文本值定位;
  7. cssSelector:css选择器定位;
  8. xpath:通过元素的路径、属性定位

三.xpath和css定位都比较强大,那他们之间有什么区别?

  1. Css locator比Path locator速度快,因为css是配合html来工作,它实现的原理是匹配对象的原理,而xpath是配合xml工作的,它实现的原理是遍历的原理,所以两者在设计上,css性能更优秀
  2. 对于class属性Css能直接匹配部分,而Xpath对于class跟朴廷属性一直
  3. xpath可匹配祖先元素,css不可以
  4. 查找兄弟元素,css只能查找元素后面(弟弟妹妹)的元素,不能像前找(哥哥姐姐)

四.你写的测试脚本能在不同浏览器上运行吗?

  • 当然可以,我写的用例可以在ie,火狐和谷歌这三种浏览器上运行。实现的思路是封装一个方法,分别传入一个浏览器的字符串,入传入IE就是用IE,如果传入FireFox就是用FireFox,如果传入Chorme就使用Chrome浏览器,并且使用什么浏览器可以在总的配置中进行配置,需要注意的是每个浏览器使用的驱动不一样。

五.在你做自动化过程中,遇到了什么问题吗?举例下

  • 这个问题,不管是自动化还是任何工作,都会被问到。主要想知道你是如何解决问题的,从而推断你问题分析和解决能力。当然遇到问题和挑战,主要有以下几点 :频繁地变更UI,经常要修复页面对象里面代码 运用用例报错和处理,例如元素不可见,元素找不到这样的异常 测试脚本复用,尽可能多代码复用 一些新框架产生的页面定位问题,例如ck编辑器,动态表格等

六.什么是PO模式,为什么要使用它?

PO模式是一种设计思想,在实际编码的时候可以有若干种实现方式。实际上,也建议大家根据自己项目的情况来动态的编码。具体来说,常见的PO模式有:

  • 三层:对象库层+case层+page层
  • 四层:对象库层+case层+page层+公共类

PO是page Object 模式的简称,它是一种设计思想,意思是把一个页面,当作一个对象,页面的元素和元素之间的操作方法就是页面对象的属性和行为,PO模式一般使用三层架构,分别为基础封装层BasePage,PO页面对象层,TestCase测试用力层。
对于简单的Selenium自动化测试,我们要做的不过是找到页面元素,并且值传递给这些元素。但是加入有10个脚本同时调用了一个相同的页面元素,当这个元素发生改变,我们需要修改10个脚本。随着脚本书的增加,时间工作复杂度也飞速增长。这个时候我们就可以考利设计一个类,专门用来页面元素的查找、传递值和修正。这样当一个页面元素发生改变的时候,秩序修改一个类,而不用同时修改10个脚本。
Page Object是一种程序设计模式,将面向过程转变为面向对象(页面对象),将测试对象(按钮、输入框、标题等)及单个的测试步骤封装在每个Page对象中,以page为单位进行管理。
这样,在Selenium测试页面中可以通过调用页面类来获取页面元素,从而桥面的避免了当页面元素id或者位置变化时,需要改测试页面代码的情况。当页面元素id变化时,只需要更改测试Class中页面的属性即可。可以代码复用,降低维护成本,提高程序可读性可编辑效率。

POM解决的问题

  • 以页面为单位,集中管理元素和方法。当页面元素或流程变动时只需要修改相关页面方法即可,可不需要修改相应的脚本
  • 编写脚本简单,顺着业务逻辑写脚本。page object模式以业务逻辑上的每一步操作作为分区点,页面方法代表了此页面的夜歌业务操作并严格控制此操作的后续流程
  • 后期维护方便

在编写PO前,建议先掌握一下几个知识点:
selenium库的基础运营
xpath语法
pytest或者unitest
面向对象中的类和继承

七.cookie 和 session 的区别?

  • 会话(session)跟踪是web程序中常用的技术,用来跟踪用户的整个会话
  • cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份

区别:

  1. 数据存放位置不同:cookie数据存放在客户端浏览器上,session数据存放在服务器上。
  2. 安全程度不同:cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考利到安全应当使用session。
  3. 性能使用程度不同:session会在一定时间内保存在服务器上。当访问增多,会比较占用服务器的性能,考虑到减轻服务器性能方面,应当使用cookie
  4. 数据存储大小不同:单个cookie保存的数据不能超过4k,很多浏览器都限制一个站点最多保存20个cookie,而session则存储于服务端,浏览器对其没有限制

八.web自动化中有哪些场景需要特殊处理

  • iframe元素,当要操作的元素在iframe中是需要先将driver切换至该iframe才能操作,切换方式有四种,通过id、name、索引、ifram元素对象,并且在多iframe切换是还需要进行各种切换
  • 新窗口打开,当要操作的元素在一个新窗口打开的页面上时,就需要先将driver切换值新窗口上才能进行操作
  • 时间操控,通常时间控件只能选择无法输入,那么可以采用js方式修改时间空间的只读属性然后再进行输入,或者用js直接修改时间空间的value值
  • 元素不在当前视野需要滚动才会出现,可以采用js的方式修改时间空间的只读属性然后在进行输入,或者用js直接修改时间控件的value值
  • 元素不在当前事业需要滚动才会出现,可以采用js的方式滚动,但是有时候界面中有多个滚动条js就会失效,则需要现将光标置入到滚动条区域然后模拟键盘上的上下左右键来操作

九.Selenium 框架的底层原理

  • Selenium 框架的底层主要依赖于 WebDriver 协议。WebDriver 协议是一种基于 HTTP 的协议,用于定义 Selenium 客户端与浏览器驱动程序之间的通信方式。

  • 当我们使用 Selenium 客户端发送命令时,例如点击某个按钮或输入文本,这些命令会被转换为 WebDriver 协议的请求,并通过 HTTP 发送给浏览器驱动程序。浏览器驱动程序接收到请求后,会将它们转换为浏览器可以理解的操作,并在浏览器中执行相应的动作。执行结果会通过 WebDriver 协议的响应返回给 Selenium 客户端。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值