自动化测试面试题 问+答

自勉。

1.如何使用xpath定位一个兄弟元素,就是和该元素同属于一个父亲节点的元素?(找到父亲,再找到自己的兄弟 )

  • a标签后面的第N个标签:"//a[@id='3']/following-sibling::*[N]"
  • a标签的前面的第N个标签:"//a[@id='3']/preceding-sibling::*[N]"
  • 或者xpath轴定位

2.//*[contains(@text,"登录")] 是什么意思 ?

         查询包含登录关键字的所有元素

3.自动化遇到用例fail掉如何排查故障?

  1. 查看fail log,根据log显示的错误内容查看脚本当前位置是否错误,或者没有等待元素出现就操作等
  2. 若脚本正常,再手工操作当前用例是否会出现bug等

4.等待元素出现的这个方法如何实现的

  •  显性等待

    WebDriverWait,配合该类的until()和until_not()方法,表示程序每隔x秒去判断一下指定的元素是否加载完,加载完了就执行下一步,否则继续每隔x秒去判断,指定时间截止。如果超时就会抛出异常。

  • 隐性等待  Implicitly_wait(xxx)  这个等待表示在规定的时间内页面的所有元素都加载完了就执行下一步,否则一直等到时间截止,然后再继续下一步。

  • sleep

5.selenium中如何判断元素是否存在?

     selenium里面没有直接判断元素是否存在的方法,需要自己写脚本进行判断。   

      find_elements方法自动化测试面试题 问+答_第1张图片

6.使用什么测试框架做的上一个项目的自动化测试?

   这个根据实际情况回答吧。比如说用robot framework

7.selenium中hidden或者是display = none的元素是否可以定位到?

   不可以的,除非你用js将元素改为可见就可以了。

    js = 'document.getElementById("ReportViewer1_ctl06_ctl04_ctl00_Menu").style.display="block";  

    brower.execute_script(js) # 调用js方法,同时执行js脚本

8.selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?

    a.设置元素等待时间  b.可以循环更换定位当时,如id,name,xpath,css等

9.如何提高selenium脚本的执行速度?

   a.尽量少使用sleep,多使用显示等待  b.电脑配置,网速等问题处理好  c.页面内容过多加载较慢的情况下,可以看一下加载的内容是否都是需要测试的范围,如果不是就设置超时时间,中断页面加载 。

    d.另外从代码方面提高python的运行效率:1.   使用生成器,因为可以节约大量内存  2.循环代码优化,避免过多重复代码的执行  3.核心模块用Cython PyPy等,提高效率  4.多进程、多线程、协程  5.多个if elif条件判断,可以把最有可能先发生的条件放到前面写,这样可以减少程序判断的次数,提高效率

10.用例在运行过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了,如何去提升用例的稳定性?

  • 测试专属profile,尽量让静态资源缓存(对于firefox,考虑使用测试专用的profile,因为每次启动浏览器的时候firefox会创建1个新的profile,对于这个新的profile,所有的静态资源都是从服务器直接下载,而不是从缓存里加载,这就导致网络不好的时候用例运行速度特别慢的问题
  • 尽量使用显式等待
  • 尽量使用测试专用环境,避免其他类型的测试同时进行,对数据造成干扰

11.你的自动化用例的执行策略是什么?

  • 周期执行:每周确定某一天某一个时间段开始执行已经完成并提交之后的脚本用例
  • 动态执行:每次项目新版本发布之后开始执行已经完成并提交之后的脚本用例

12.自动化测试的时候是不是需要连接数据库做数据校验?

    不需要,只有单元测试可能会做。

13.如何去定位属性动态变化的元素?

    xpath轴定位,通过同级、父级、子级进行定位

14.如何去定位页面上动态加载的元素?

      显示等待

15.什么是持续集成?

      最简单的形式是包括一个监控版本控制(SVN等等)变化的工具。当变化被发觉时,这个工具可以自动的编译并测试你的应用。

16.点击链接以后,selenium是否会自动等待该页面加载完毕?

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

17.什么是断言?

   可以简单理解为检查点,就是预期和实际的比较

  • 如果预期等于实际,断言通过,测试报告上记录pass
  • 如果预期不等于实际,断言失败,测试报告上记录fail   

18.page object设置模式中,是否需要在page里定位的方法中加上断言?

    一般不要,除非是要判断页面是否正确加载。Generally don’t make assertions

19.page object设计模式中,如何实现页面的跳转?

       返回另一个页面的实例可以代表页面跳转。(这个如果不是很知道,需要自己写代码自己试一下)

20.什么是page object设计模式?

Page object模式,主要是编写不同层级的脚本,然后一层一层的继承来完成对web测试过程进行分解。

首先:建立一个基本类page.py ,在里面定义了最基础的操作,比如抽象出来的 定位、切换窗口、等基础功能,这里相当于一个存放基础操作的仓库。(比如抽象出你测试web应用所有界面共同的操作)

接着:创建你想要的界面类(注意这个类是继承自上面的page),比如web常见的登陆界面、注册界面等,在这个类里面添加相应界面需要做的一些操作,相当于自定义一些界面的功能。

最后:你可以新建一个测试用例的脚本,去调用上面你写的界面类了。

所以我个人认为PageObject最大的作用就是抽象出一些公用的操作,更方便写测试用例。也更清晰的展示各个web界面的自己的特点。

21.什么是分层测试?

自动化测试面试题 问+答_第2张图片

22.webdriver可以用来做接口测试吗?

   不可以

23.列举出你熟悉的自动化工具,并说明其实现原理

 Appium 是一个移动端自动化测试开源工具,Selenium是一个用于Web应用程序测试的工具

https://www.cnblogs.com/finer/p/8762258.html

24.什么是关键字驱动?

     功能自动化测试框架,表格驱动测试或者基于动作字的测试

25.web自动化测试中selenium除了定位元素,你觉得它还能做什么?

   a.填写页面内容,input或textarea元素中输入内容

   b.拖放,无论是移动一个元素,或放到另一个元素内

   c.在不同的窗口和框架之间移动.对于现在的web应用来说,没有任何frames或者只包含一个window窗口是比较罕见的。 WebDriver 支持在不同的窗口之间移动,只需要调用``switch_to_window``方法即可

   d.访问浏览器历史记录.使用``get``命令打开一个页面, ( driver.get("http://www.example.com")),WebDriver有很多更小的,以任务为导向的接口, navigation就是一个有用的任务,打开一个页面你可以使用`get`:driver.ge("http://www.example.com")

在浏览历史中前进和后退你可以使用:driver.forward() ,driver.back()

  f. 操作Cookies .

      打开一个页面 driver.get(“http://www.example.com”)

     设置Cookies,这个cookie在域名根目录下(”/”)生效 cookie = {‘name’ : ‘foo’, ‘value’ : ‘bar’} driver.add_cookie(cookie)

     获取所有当前URL下可获得的Cookies driver.get_cookies()

 

 努力努力再努力...................!

 

 

 

 

 

  

 

 

  

 

 

 

 

    


 

 

  

  

 


 

 

   

 

 

 

 

 

你可能感兴趣的:(selenium,自动化测试,python,测试)