Skip to content

中级面试题

如何判断一个页面上元素是否存在

面试题目

  • 如何通过子元素定位父元素

公司

  • 某金融公司

招聘类型

  • 社招
  • 校招

答案

考察点

面试官想了解:

  • 是否真的做过 UI 自动化测试
  • 在做测试的时候遇到元素难定位的问题如何解决,如何判断元素在页面上是否存在?是否有自己的思考与总结

  • 是否了解显式等待的用法

  • 是否了解 find_elements() 的用法

技术点

涉及的技术点:

  • 通过异常处理来判断元素是否存在

  • 通过查找元素列表 find_elements() 判断元素是否存在

  • 显式等待

回答

  • 方法一:通过异常处理来判断元素是否存在,可以使用 try…except… 未找到元素的时候捕获这个异常

  • 方法二:通过查找元素列表 find_elements() 判断元素是否存在,定义一个方法,如果元素列表大于 0 则元素存在,返回 True, 如果元素列表等于 0 则元素不存在,返回 False

  • 方法三:显式等待,结合 WebDriverWaitexpected_conditions 判断(推荐)

如何通过子元素定位父元素

面试题目

  • 如何通过子元素定位父元素

公司

  • 某金融公司

招聘类型

  • 社招
  • 校招

答案

技术点

涉及的技术点:

  • .. 代表通过子元素定位父元素。

  • 通过 parent::*定位父元素

回答

  • 方法一:通过 element/.. 定位父结果,例如:
# 查找节点的父节点

$x('//*[@id="site-logo"]/..')
  • 方法二:通过 parent::*定位父元素,例如:
# 查找节点的父节点

$x('//*[@id="site-logo"]/parent::*')

显式等待与隐式等待的区别是什么

面试题目

  • UI 自动化中,显式等待与隐式等待的区别是什么?

公司

  • 某金融公司

招聘类型

  • 社招
  • 校招

答案

考察点

面试官想了解:

  • 显式等待与隐式等待的区别

  • 三种等待方式分别是什么,有什么区别

技术点

涉及的技术点:

  • 显式等待

  • 隐式等待

  • 强制等待

回答

自动化测试中,Selenium 框架为了页面等待提供了两种等待方式:隐式等待、显示等待。

隐式等待

在创建 driver 时声明并且只声明一次,声明后在整个 WebDriver 周期都生效,相当于一个全局变量。隐式等待相当于告诉 driver 去等待一定时间后再去执行代码操作,即当页面加载完成后,才会执行下一步。

优点

只需声明一次,不需要在每个操作步骤声明。

缺点

设置隐式等待后,对应的影响的不是某一个元素而是整个页面,只有整个页面加载完成后才会执行下一步。

页面加载完成后,如果要操作的是某个元素,则需要等当前元素的所有属性加载完成。即不只是 UI 加载完成,还需要对应的元素的 js 文件、图片等加载完成,此时会增加不必要的加载时间。

代码 Java 代码声明如下:


driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(等待时间秒数));

Python 代码声明如下:

driver.implicitly_wait(等待时间)

显式等待

需要定位某个元素时,但是元素有可能还未加载出来,这时就需要针对具体的元素或者页面进行显式等待条件的判断。

优点

针对指定元素或页面生效,不是整个 WebDriver 周期生效。所以,可以根据对应定位的元素来设置显式等待的判断条件,会节省加载其它无关文件的时间,即不需要等待页面加载完成。

缺点

必须在需要的操作前声明对应的显示等待及其判断条件,如果每个步骤都需要则需要在每个步骤前都声明。

代码 Java 代码声明如下:


WebDriverWait wait = new WebDriverWait(androidDriver,

Duration.ofSeconds(时间), //总共查找等待条件的时间

Duration.ofSeconds(时间));//每隔多少秒去查找一次显示等待的条件

wait.util(条件函数);

Python 代码声明如下:


Welement = WebDriverWait(driver, 最长等待时间, 执行间隔).until(条件函数)

显式等待和隐式等待的区别

隐式等待可以看作全局变量,显式等待可以看作为局部变量。

强制等待

直接是线程等待,只有等待完成后才能运行代码。

隐藏元素怎么定位

面试题目

  • 级别: L1
  • 知识模块: App自动化测试

隐藏元素怎么定位

公司

  • 优酷外包

招聘类型

社招

题目解析

  1. 本题考察点为定位隐藏元素,即元素的 display 属性为 none。

  2. selenium 常用的 XPATH 和 CSS 选择器,只能找到可见的元素,隐藏元素可以使用 execute_script 方法执行 JavaScript 代码来查找隐藏元素,用法示例如下:

# 使用JavaScript找到隐藏元素
hidden_element = driver.execute_script("return document.querySelector('<CSS 定位表达式>');")

# 执行某些操作,例如点击隐藏元素
driver.execute_script("arguments[0].click();", hidden_element)
  1. 还有一种方式是需要先将隐藏元素变为可见,使用 JavaScript 设置隐藏元素可见:
driver.execute_script("arguments[0].style.display='block';", hidden_element)

答案

隐藏元素可以通过定位其父元素或者兄弟元素来间接定位,也可以直接使用 JavaScript 代码来操作隐藏元素或者通过执行 JavaScript 代码使其显示。

元素明明定位到了,点击无效

面试题目

  • 一个元素明明定位到了,点击无效(也没报错),如果解决?

公司

  • 某金融公司

招聘类型

  • 社招
  • 校招

答案

  • 方法一:页面上有的时候元素点了没有反应(比如时间日期组件),可以通过 js 操作

  • 方法二:有的页面中按钮属性加载较慢,虽然能定位到这个元素,但还未加载出可点击属性,点了没有反应,这时可以使用显式等待,封装一个方法,如果点了没有反应,则利用显式等待,等一段时间再点一次,如果在显等的时间内,点了都没有反应,则抛出异常