频次最高的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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 搭建Maven环境——使用本地的maven环境

    搭建Maven环境——使用本地的maven环境

    2021年8月28日
    54
  • linux卸载软件_linux卸载显示未安装

    linux卸载软件_linux卸载显示未安装linuxrpm卸载参数本站整理发布时间:2009-03-1015:38:48作者:jb51.net我要评论rpm卸载参数–test:卸载测试–nodeps:不检查依赖–noscripts:不执行脚本程序–notriggers:不执行触发程序–justdb:仅修改数据库–force强制RPM卸载软件包,并不是简单地将原来安装的文…

    2022年9月22日
    2
  • 关于去掉Li标签前面的小圆点和距离/显示下划线

    关于去掉Li标签前面的小圆点和距离/显示下划线解决方法去掉 Li 标签前面的距离 nbsp nbsp 设置 ul nbsp nbsp padding 0px 去掉 Li 标签前面的小圆点 设置 li nbsp nbsp nbsp list style type none 显示下划线 nbsp nbsp nbsp text decoration underline

    2025年7月24日
    5
  • arraylist的基本方法_什么是arraylist

    arraylist的基本方法_什么是arraylist简介ArrayList是java集合框架中比较常用的数据结构了。继承自AbstractList,实现了List接口。底层基于数组实现容量大小动态变化。允许null的存在。同时还实现了RandomAccess、Cloneable、Serializable接口,所以ArrayList是支持快速访问、复制、序列化的。成员变量ArrayList底层是基于数组来实现容量大小动态变化的。

    2022年10月2日
    4
  • ubuntu16安装中文输入法_ubuntu输入法安装

    ubuntu16安装中文输入法_ubuntu输入法安装本文安装谷歌输入法。使用一段时间后发现,谷歌输入法用起来极舒服,比sougouforlinux好用多了。记得谷歌的中文输入法主要是北京分部在做,对googlecn的好感度飙升!!!安装fcitx-googlepinyin(Ctrl+Alt+T打开终端,输入)sudoapt-getinstallfcitx-googlepinyin输入密码开始安装(输入密码的时候光标是不会移动的,不会有对应密码的***这样的星号出来,只管输完密码按回车就行),命令行会停在[y/n]的确认行,输入y并

    2022年9月25日
    4

发表回复

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

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