频次最高的38道selenium面试题及答案(上)「建议收藏」

频次最高的38道selenium面试题及答案(上)「建议收藏」1、selenium的原理是什么?selenium的原理涉及到3个部分,分别是:浏览器 driver:一般我们都会下载driver client:也就是我们写的代码client其实并不知道浏览器是怎么工作的,但是driver知道,在selenium启动以后,driver其实充当了服务器的角色,跟client和浏览器通信,client根据webdriver协议发送请求给driver,driver解析请求,并在浏览器上执行相应的操作,并把执行结果返回给client。这就是seleniu…

大家好,又见面了,我是你们的朋友全栈君。

频次最高的38道selenium面试题及答案(上)「建议收藏」

1、selenium的原理是什么?

selenium的原理涉及到3个部分,分别是:

  • 浏览器
  • driver:一般我们都会下载driver
  • client:也就是我们写的代码

client其实并不知道浏览器是怎么工作的,但是driver知道,在selenium启动以后,driver其实充当了服务器的角色,跟client和浏览器通信,client根据webdriver协议发送请求给driver,driver解析请求,并在浏览器上执行相应的操作,并把执行结果返回给client。这就是selenium工作的大致原理。

2、WebDriver提供哪些常见类型的驱动程序?

WebDriver中常见驱动程序有(这部分建议在面试前查阅一下官网,做到实时同步更新):

  • FirefoxDriver
  • InternetExplorerDriver
  • ChromeDriver
  • SafariDriver
  • OperaDriver
  • AndroidDriver

3、webdriver的协议是什么?

client与driver之间的约定,无论client是使用java实现还是c#实现,只要通过这个约定,client就可以准确的告诉drier它要做什么以及怎么做。

webdriver协议本身是http协议,数据传输使用json。
这里有webdriver协议的所有endpoint,稍微浏览下就知道这些endpoints涵盖了selenium的所有功能。

4、什么是page object设计模式?

简单来说就是用class去表示被测页面。在class中定义页面上的元素和一些该页面上专属的方法。

5、什么是page factory?

Page Factory实际上是官方给出的java page object的工厂模式实现。

6、如何查找元素是否显示在屏幕上?

WebDriver通过isDisplayed(), isSelected(), isEnabled(),这三种方法判断Web元素的可见性,这类方法将返回结果是布尔类型;Web元素可以是按钮,下拉框,复选框,单选按钮,标签等。
①isDisplayed():
boolean b1 = driver.findElement(By.id(“XXX”)).isDisplayed();
②isSelected():
boolean b2 = driver.findElement(By.id(“XXX”)).isSelected();
③isEnabled():
boolean b3 = driver.findElement(By.id(“XXX”)).isEnabled();

7、selenium中如何判断元素是否存在?

selenium中没有提供原生的方法判断元素是否存在,一般我们可以通过定位元素+异常捕获的方式判断。

# 判断元素是否存在
try:
dr.find_element_by_id('none')
except NoSuchElementException:
print 'element does not exist'

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

不可以,selenium不能定位不可见的元素。display=none的元素实际上是不可见元素。

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

  • 当网速不好的情况下,使用合适的等待时间;
  • 被点击的元素一定要占一定的空间,因为selenium默认会去点这个元素的中心点,不占空间的元素算不出来中心点;
  • 被点击的元素不能被其他元素遮挡;
  • 被点击的元素不能在viewport之外,也就是说如果元素必须是可见的或者通过滚动条操作使得元素可见;
  • 判断元素是否是可以被点击的。

10、selenium自动化页面元素找不到存在异常的原因?

  • 元素定位错误;
  • 页面加载时间过慢,需要查找的元素程序已经完成,单页面还未加载,此时可以设置加载页面等待时间;
  • 有可能元素包含在iframe或者frame里面,需要切换。

11、如何去定位属性动态变化的元素?

属性动态变化是指该element没有固定的属性值,只能通过相对位置定位。
第一种方法:用findelements遍历。
第二种方法:通过xpath的轴 parent/following-sibling/precent-sibling

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

触发动态事件,继而findelement;如果是动态菜单,需要一级一级的find。

13、如何提高selenium脚本的执行速度?

  • 使用更高配置的电脑和选择更快的网络环境;
  • 使用效率更高的语言,比如java执行速度就快过python;
  • 优化代码;
  • 不要盲目的加sleep,尽量使用显式等待;
  • 可以考虑分布式执行(如,配置testNG实现多线程)或者使用selenium grid;
  • 对于firefox,考虑使用测试专用的profile,因为每次启动浏览器的时候firefox会创建1个新的profile,对于这个新的profile,所有的静态资源都是从服务器直接下载,而不是从缓存里加载,这就导致网络不好的时候用例运行速度特别慢的问题;
  • chrome浏览器和safari浏览器的执行速度看上去是最快的。

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

  • 测试专属profile,尽量让静态资源缓存;
  • 尽量使用显式等待;
  • 尽量使用测试专用环境,避免其他类型的测试同时进行,对数据造成干扰。

15、id,name,clas,xpath,css selector这些定位器,你最偏爱哪一种,为什么?

xpath和css最为灵活。id、name等需要开发支持。

16、selenium为什么不推荐使用xpath定位?

selenium使用xpath定位时采用遍历页面的方式,性能指标较差。另外xpath定位有通过绝对路径定位的,有时会不准确;
而用css选择器定位比较简洁,运行速度更快,通常用于性能要求严格的场景。

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

显式等待。(显示等待 就是有条件的等待,隐式等待 就是无条件的等待,如sleep、driver.implicitly_wait())
显示等待例子:
WebDriverWait(driver, 3, 0.5) #传入三个参数,第一个是浏览器驱动,第二个是等待多少秒,第三个是每隔多少秒监控一次

18、如何去定位属性动态变化的元素?

找出属性动态变化的规律,然后根据上下文生成动态属性。

19、如何通过子元素定位父元素?

通过父元素定位子元素,可以通过二次定位来找到。
第一种:通过子元素定位父元素,selenium提供了parent方法,但是只能定位到父元素,却不能获取元素属性,也不能操作。
第二种:通过xpath的语法直接定位。 如.//*[@name=”hello”]/.. 两个点代表父级元素。

点击链接加入群聊【软件测试交流群】:icon-default.png?t=LA92https://jq.qq.com/?_wv=1027&k=oIzwwn9E

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/151421.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Matlab 基础知识——矩阵操作及运算(矩阵、数组区别)

    Matlab 基础知识——矩阵操作及运算(矩阵、数组区别)看论文时,经常看到矩阵,但在记忆里又看到数组。那么问题来了,矩阵和数组分别是什么?二者有什么区别?看论文时,经常看到矩阵,但在记忆里又看到数组。那么问题来了,矩阵和数组分别是什么?二者有什么区别?在数学上,定义m×n个数(i=1,2…,m;j=1,2,…n)排成的m行n列的数表示为m行n列的矩阵,并且用大写加粗黑色字母表示。…

    2022年5月30日
    37
  • linux 下 android studio 不能输入中文记录

    linux 下 android studio 不能输入中文记录

    2021年7月1日
    114
  • java中数组输出_java数组输出方法

    java中数组输出_java数组输出方法1.数组的输出的三种方式一维数组:定义一个数组int[]array={1,2,3,4,5};(1)传统的for循环方式1for(inti=0;i(2)foreach循环1for(inta:array)2System.out.println(a);(3)利用Array类中的toString方法调用Array.toString(a),返回一个包含数组元素的字符串,这些元素被放置在…

    2022年10月11日
    1
  • SpringBoot使用@Mapper和@MapperScan注解无效的解决方法

    SpringBoot使用@Mapper和@MapperScan注解无效的解决方法在使用@Mapper注解时,注解无效,service层,dao层该添加的注解都添加了,最后发现是少加了一个jar包<!–缺少此jar包,导致@Mapper注解无效–><dependency><groupId>org.mybatis.spring.boot</groupId>

    2022年6月10日
    56
  • C++ Opencv imfill 孔洞填充函数的实现(学习笔记)[通俗易懂]

    C++ Opencv imfill 孔洞填充函数的实现(学习笔记)[通俗易懂]C++Opencvimfill孔洞填充函数的实现函数实现的中心思想二值图寻找连通域的关键种子点的确定连通域的寻找过程条件设定最后赋值话不多说直接上函数代码主函数代码代码框截图实例图片运行结果函数实现的中心思想二值图此程序针对于二值图,寻找二值图中像素值为0的连通域,将所有连通域的像素点分别保存下来,将符合条件的连通域的像素值置为255;寻找连通域的关键针对填洞功能的实现,也就…

    2022年9月12日
    0
  • 异步fifo的深度,如何确定?_二叉树的最小深度和最大深度

    异步fifo的深度,如何确定?_二叉树的最小深度和最大深度目录1.异步FIFO最小深度计算1.1异步FIFO最小深度计算原理1.2异步FIFO最小深度常用计算公式1.2.1假如读写FIFO是同时进行的1.2.2读写FIFO不是同时进行的情况2.异步FIFO最小深度计算实例2.1用于SDRAM中的读写FIFO2.2异步时钟数据接口3.FIFO实例1.异步FIFO最小深度计算计算FIF…

    2022年8月13日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号