2022 年 Selenium 自动化高频面试题及答案整理

面试题列表

selenium中,有哪些不同定位元素方法?
你最常用哪种定位方式,为什么?
怎么判断元素是否存在?
如何通过子元素定位父元素?
如何去定位动态变化的元素?
selenium中隐藏元素如何定位?
一个元素明明定位到了,点击无效(也没报错).如何解决?
定位不到元素是什么原因导致的?
selenium有哪些等待时间方式及场景应用?
selenium自动化测试中遇见过哪些异常?
如何选中下拉列表中的下拉选项?
在日历这种web表单你是如何处理的?
Selenium如何处理弹窗?
driver.quit()和driver.close0)的区别?
Selenium中如何保证操作元素的成功率或者稳定性?
如何提高selenium脚本的执行速度?
自动化测试使用过分布式吗?如何实现的?
webdriver client工作原理?
什么是POM,为什么要使用?
在你做自动化过程中,遇到了什么问题吗?
你的自动化用例的执行策略是什么?
自动化测试的优势是什么?
说一下开展自动化工作的主要流程是怎样的?
在制定自动化测试计划的需要考虑哪些方面?
你自动化测试时关注的一些指标?
你们公司自动化测试用例大概多少条?覆盖率多高?
你们公司开展自动化测试遇到一些什么问题?

selenium中,有哪些不同定位元素方法?

  • 常用的八大定位方式:id、name、class、xpath、CSS selector、link_text、partial_link、tag
  • 高级定位方式:JavaScript、jQuery

你最常用哪种定位方式,为什么?

  • 优先使用id 方式,因为简单方便,定位最快。
  • 其次是 Xpath,因为xpath定位方式非常灵活,由于很多情况下html标签的属性不够规范,无法唯一定位,CSS不支持文本搜索,XPATH支持文本搜索
  • 最后选择 CSS ,因为在大多数浏览器中,解析速度比XPath更快,但是当查找元素比较简单,用css没错,如果复杂,用xpath比较好

怎么判断元素是否存在?

  • 方法1,用try...except...
def is_element_exist(driver, locator):
    '''
    判断元素是否存在,存在返回True,不存返回False
    :param locator: locator为元组类型,如("id", "id")
    :return: bool值,True or False
    '''
    try:
        driver.find_element(*locator)
        return True
    except Exception as msg:
        print("元素%s找不到:%s" % (locator, msg))
        return False
  • 方法2,使用WebDriverWaitexpected_conditions结合判断(推荐使用
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

def is_element_exist(driver, locator):
    '''
    结合WebDriverWait和expected_conditions判断元素是否存在,
    每间隔0.5秒判断一次,30s超时,存在返回True,不存返回False
    :param locator: locator为元组类型,如("id", "id")
    :return: bool值,True or False
    '''
    try:
        WebDriverWait(driver, 30, 0.5).until(EC.presence_of_element_located(locator))
        return True
    except:
        return False
  • 方法3,用elements定义一组元素方法
def is_element_exist(driver, locator):
    '''
    判断元素是否存在,存在返回True,不存返回False
    :param locator: locator为元组类型,如("id", "id")
    :return: bool值,True or False
    '''
    eles = driver.find_elements(*locator)
    if len(eles) < 1:
        return False
    else:
        return True

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

  • 通过xpath的语法直接定位:.//*[@name=“name”]/… 两个点…就是代表父级元素

如何去定位动态变化的元素?

  • 类型一:属性动态
    • 通过xpath的轴, parent/following-sibling/precent-sibling
    • findbyelements遍历
  • 类型二:动态加载的元素
    • 触发动态事件事件,进而findElemnt,例如多级菜单,可能通过ajax加载数据

selenium中隐藏元素如何定位?

如果元素被隐藏,主要对元素添加了 type="hidden" 或者 style="display: none;" 属性

  • 定位隐藏元素跟正常元素一样,使用基本定位方式即可,但是无法进行clicksend_keysclear等操作
  • 操作隐藏元素,通过JS操作隐藏元素(重点)

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

  • 使用js点击,selenium有时候点击元素是会失效

定位不到元素是什么原因导致的?

  • 元素定位方式编写错误
  • 点击速度过快,页面没有加载出来就需要点击页面上的元素
  • frame/iframe表单嵌套
  • 页面跳转到新的标签页,未切换handle窗口
  • 使用了动态属性进行定位元素
  • 页面上的警告弹框
  • 页面元素失去焦点导致脚本运行不稳定
  • 元素被遮挡,不可用,不可见

selenium 有哪些等待时间方式及场景应用?

总共有三种等待方式,分别为强制等待、隐式等待、显示等待

强制等待sleep()

不管元素,是否在页面出现都等 3 秒,再去操作它,是强制性。但是这种情况往往一般都只用在脚本的调试,真正的自动化测试用例中一般不会使用。

隐式等待implicitly_wait()

是设置的全局等待,等待时间是对页面中的所有元素设置加载时间,如果超出了设置时间的则抛出异常。
缺点:隐式等待的三秒钟就是在等待这个页面的所有 js 和图片加载出来,就算需要操作的按钮出来了,还要去等 页面js、img 加载完成

显示等待WebDriverWait()

是针对于某个特定的元素设置的等待时间,在设置时间内,默认每隔一段时间检测一次当前页面某个元素是否存在,如果在规定的时间内找到了元素,则直接执行,即找到元素就执行相关操作,如果超过设置时间检测不到则抛出异常。默认检测频率为0.5s,默认抛出异常为:NoSuchElementException

selenium 自动化测试中遇见过哪些异常?

方法说明
NoSuchElementException当选择器没有返回一个元素时,异常抛出
ElementNotVisibleException元素DOM存在,但它是不可见的,不能与之进行交互,异常将抛出
NoSuchAttributeException当选择元素不存在该属性时,抛出异常
ElementNotSelectableException当选择不可选元素时,抛出异常
NoSuchFrameException当切换的框架不存在时,异常抛出
TimeoutException当执行操作命令执行超过最长时间完成,抛出异常
NoSuchWindowException当切换的目标窗口不存在时,异常抛出

如何选中下拉列表中的下拉选项?

  • 通过选项的顺序,第一个为0
    select_by_index(index)
  • 通过value属性
    select_by_value(value)
  • 通过选项可见文本
    select_by_visible_text(text)

在日历这种web 表单你是如何处理的?

  • 直接通过js操作

Selenium如何处理弹窗?

  • alert 弹框

    • 确认
      driver.switch_to.alert.accept()
    • 取消
      driver.switch_to.alert.dismiss()
    • 在弹出框输入内容
      driver.switch_to.alert.send_keys(“输入数据”)
  • window 弹框

    • win32gui
    • Autolt

driver.quit()和driver.close()的区别?

  • driver.close()仅关闭当前用户正在操作的页面
  • driver.quit()关闭整个浏览器,关闭所有的页面

Selenium中如何保证操作元素的成功率或者稳定性?

全部答案,文末关注公众号查看

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

全部答案,文末关注公众号查看

自动化测试使用过分布式吗?如何实现的?

全部答案,文末关注公众号查看

webdriver client 工作原理?

全部答案,文末关注公众号查看

什么是POM,为什么要使用?

全部答案,文末关注公众号查看

在你做自动化过程中,遇到了什么问题吗?

全部答案,文末关注公众号查看

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

全部答案,文末关注公众号查看

自动化测试的优势是什么?

全部答案,文末关注公众号查看

说一下开展自动化工作的主要流程是怎样的?

全部答案,文末关注公众号查看

在制定自动化测试计划的需要考虑哪些方面?

全部答案,文末关注公众号查看

你自动化测试时关注的一些指标?

全部答案,文末关注公众号查看

你们公司自动化测试用例大概多少条?覆盖率多高?

全部答案,文末关注公众号查看

你们公司开展自动化测试遇到一些什么问题?

全部答案,文末关注公众号查看

以上内容纯属个人理解,如有不足,欢迎各位大神指正,转载请注明出处!

如果觉得文章不错,欢迎关注微信公众号,微信公众号定期推送相关测试技术文章
个人微信号

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试之路king

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值