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

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...

  1. def is_element_exist(driver, locator):

  2. '''

  3. 判断元素是否存在,存在返回True,不存返回False

  4. :param locator: locator为元组类型,如("id", "id")

  5. :return: bool值,True or False

  6. '''

  7. try:

  8. driver.find_element(*locator)

  9. return True

  10. except Exception as msg:

  11. print("元素%s找不到:%s" % (locator, msg))

  12. return False

'

运行

运行

    •方法2,使用WebDriverWaitexpected_conditions结合判断(推荐使用

  1. from selenium import webdriver

  2. from selenium.webdriver.support import expected_conditions as EC

  3. from selenium.webdriver.support.ui import WebDriverWait

  4. def is_element_exist(driver, locator):

  5. '''

  6. 结合WebDriverWait和expected_conditions判断元素是否存在,

  7. 每间隔0.5秒判断一次,30s超时,存在返回True,不存返回False

  8. :param locator: locator为元组类型,如("id", "id")

  9. :return: bool值,True or False

  10. '''

  11. try:

  12. WebDriverWait(driver, 30, 0.5).until(EC.presence_of_element_located(locator))

  13. return True

  14. except:

  15. return False

'

运行

运行

   •方法3,用elements定义一组元素方法

  1. def is_element_exist(driver, locator):

  2. '''

  3. 判断元素是否存在,存在返回True,不存返回False

  4. :param locator: locator为元组类型,如("id", "id")

  5. :return: bool值,True or False

  6. '''

  7. eles = driver.find_elements(*locator)

  8. if len(eles) < 1:

  9. return False

  10. else:

  11. 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中如何保证操作元素的成功率或者稳定性?

    •减少操作步骤,例如需要多次操作进入测试页面,直接通过网址来打开,减少不必要的操作    •合理的使用等待操作:time.sleep()、driver.implicitly_wait()、WebDriverWait()    •使用多种方式进行id/name/class/xpath/css selector不同方式进行定位    •为了减少用例之间相互影响,所以设计用例时,尽量降低用例的耦合度    •多用try捕捉处理异常    •针对一些不稳定的动态控件经过JS实现操作    • 框架中使用用例失败重试,提升测试用例成功率

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

    •减少操作步骤,例如需要多次操作进入测试页面,直接通过网址来打开,减少不必要的操作    •中断页面加载,如果页面加载的内容过多,我们可以查看一下加载慢的原因,如果加载的内容不影响我们测试,就设置超时时间,中断页面加载    •服务器允许的情况下,尽量设置多线程运行,提高执行速度,前提用例之间没有耦合度    •使用更高配置的电脑和选择更快的网络环境    •不要加太多的sleep,尽量使用显式等待

说明 Selenium脚本的执行速度受多方面因素的影响,如网速,操作步骤的繁琐程度,页面加载的速度,以及我们在脚本中设置的等待时间,运行脚本的线程(进程)数等。我们在自动化测试时不要只追求运行速度,需要在合理的情况下加快执行速度,最重要是要确保稳定性,保证自动化正常执行非常重要。

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

    •实际回答    •如果使用

        •利用jenkins分布式Master-slave        •利用selenium grid分布式处理

webdriver client 工作原理?

    •selenium client(python等语言编写的自动化测试脚本)初始化一个service服务,端口为9515,通过Webdriver启动浏览器驱动程序chromedriver.exe    •通过RemoteWebDriver向浏览器驱动程序发送HTTP请求,浏览器驱动程序解析请求,打开浏览器,并获得sessionid,如果再次对浏览器操作需携带此id    •打开浏览器,绑定特定的端口,把启动后的浏览器作为webdriver的remote server    •打开浏览器后,所有的selenium的操作(访问地址,查找元素等)均通过RemoteConnection链接到remote server,然后使用execute方法调用_request方法通过urlib3向remote server发送请求    •浏览器通过请求的内容执行对应动作    •浏览器再把执行的动作结果通过浏览器驱动程序返回给测试脚本

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

PO模式是page object model的缩写,顾名思义, 是一种设计模式,实现脚本的Page类和真实的网站页面一一对应起来。

POM优点:

    •把web ui对象仓库从测试脚本分离,业务代码和测试脚本分离。    •每一个页面对应一个页面类,页面的元素写到这个页面类中。    •页面类主要包括该页面的元素定位,和这些元素相关的业务操作代码封装的方法。    •代码复用,从而减少测试脚本代码量。    •层次清晰,同时支持多个编写自动化脚本开发

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

    •UI自动化中产品后期频繁地变更UI,经常要修改Page代码    •由于执行环境原因,导致用例执行不稳定    •为了降低代码耦合性,自动化代码写的多了很多    •新框架产生的页面元素定位问题    •前期多个人协同时,代码合并出现冲突    •自动化在CI时,执行出现一些报错,由于多人代码整体执行逻辑出现冲突问题    •由于服务端实现逻辑发生改变,导致初始化数据出现问题,以至于UI自动化测试时数据出现问题

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

分情况来说

    • 一、线上监控自动化脚本,使用Jenkins定时执行,可能设置为 10分钟执行一次,这种每次执行用例数不会太多,一般都是核心流程、核心接口    •二、冒烟测试用例,这种一般用于研发提测之后进行冒烟的用例,这种一般使用Jenkins的pipeline模式,在研发部署环境之后,执行自动化用例    •三、回归测试用例,这种一般在上线之后进行执行,这种一般手动触发执行,也是在Jenkins新建一个任务,手动build    •不经常执行的测试用例,例如全量测试用例,这种一般在大版本发布、架构调整、语言翻写时,这种一般手动触发执行

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

    •减少回归测试成本    •减少兼容性测试成本    •提高测试效率    •提高测试覆盖率    •释放人力资源,让测试人员去做更加有收益的工作

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

    •需求分析    •可行性分析    •定义自动化测试覆盖的范围    •制定测试计划    •自动化设计    •自动化框架选型与设计    •用例开发    •测试执行    •测试脚本维护

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

    •测试工具选型可行性分析    •确定要做自动化测试的范围和不做自动化测试的范围    •测试环境的准备与搭建    •制定测试各阶段时间表,例如工具选型、框架设计、用例编写等关键时间节点    •制定脚本执行的一些策略,如冒烟测试的频率,回归测试的时间点及频率等    •定义自动化测试的输出,比如脚本,测试数据,发现的缺陷,测试报告等

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

    •自动化测试用例的覆盖率=自动化测试用例数 / 所用用例总数,这个比例越高测试速度越快,成本节约越多    •节省的时间成本=手工测试所花的时间-自动化测试所花的时间    •自动化测试的投入=开发脚本的投入+脚本维护的投入+工具价格    •自动化测试发现的缺陷数,每次回归测试时自动化测试发现的缺陷数及漏测数,反应了自动化用例的有效性    •动化测试投入产出比 ROI=(手工测试的成本-自动化测试成本)/ 自动化测试成本 ROI如果是负值说明自动化测试的成本未收回,ROI为正值说明自动化测试成本已回收,且值越大说明回报越好

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

    •实际情况回答即可    •覆盖率算法,自动化测试用例的覆盖率=自动化测试用例数 / 所用用例总数

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

    •公司领导对于自动化期望值太高,短时间需要见效且效果明显    •部门人员技术能力参差不齐,实际达到能力要求的不多    •希望自动测试发现大量的新缺陷    •项目流程不规范,项目变动频繁导致自动化用例维护成本高

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值