自动化测试——面试题整理

 1.selenium中有哪些元素定位方式?

元素定位的目的:使用Web自动化操作元素,让程序操作指定元素,就必须找到此元素

共有8种定位方式

  • 与name有关的:name、class_name、tag_name【标签名定位】
  • 与link相关的:link_text【精准匹配】、partitial_Link_text【模糊定位】
  • 与id相关的:id
  • 全能的:XPath、css【常用】
  • 如果存在id,优先使用id定位,比较简单,方便,CSS定位器
    selenium步骤:
    1.获取浏览器驱动——浏览器最大化——隐式等待
    2.打开URL
    3.元素定位+一系列操作
    4.退出浏览器驱动

 2.selenium中如何判断元素是否存在?

selenium中没有提供原生的方法判断元素是否存在

可以通过元素定位+异常捕获的方式来判断,比如说封装一个方法,找到元素就返回true,否则返回false, 以此来判断元素是否存在

3.selenium中常见的异常有哪些?

遇到过的异常一般有四种

  • 元素定位不到【ElementNotSelectableException】,这时候我就需要去检查我的元素定位表达式写的是否正确工比如动态元素可能我使用的属性值变了,是否存在多表单,当前所在页面是不是句柄是否正确,是否元素还没有加载出来,元素隐藏了,需要一定的操作交互才能显示出来;
  • 元素无法正常交互,一般这时候我就需要去检查我定位的元素标签是不是可操作的,页面没有最大化,导致元素没有显示,拖动页面,展示隐藏的元素
  • 超时【TimeoutException】,一般我会在自动化测试框架中封装好查找元素的方法,使用显示等待,超时没有找到元素就会报超时异常;
  • 无法创建session【WebDriverException】,初始化浏览器driver的时候可能会报这个错,大概率会是所使用的驱动与浏览器版本不匹配需要去检查确认

4.你们的UI测试框架是怎么设计的?

我主要学习的UI【Web】测试框架是基于python语言编写的,基于PO设计模式封装,用pytest管理测试用例,yaml管理测试数据并参数化运行测试用例,通过allure生成测试报告,并集成了git和Jenkins,能够实现在Jenkins/gitlab上自动拉取最新的测试代码并进行测试【不太熟悉 】

5.自动化测试能否替代手工测试?

不可以,自动化是对已有功能的测试用例进行自动运行,提高测试效率,解放人力专注于新逻辑新业务的测试,并不能创造性的进行工作。而手工测试有其不可替代的地方,因为人具有很强的判断能力,而工具没有。测试人员的经验和对错误的判断能力是工具不可替代的。人类的审美观和心理体验是工具不可模拟的。人们对是非的判断、逻辑推理能力是工具不具备的。

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

  1. 等待元素出现: 使用适当的等待机制来等待页面加载完成以及与元素定位。Selenium提供了不同类型的等待,如显式等待(Explicit Wait)和隐式等待(Implicit Wait)

  2. 定位元素的唯一性: 确保使用的元素定位方法是唯一的,可以准确地找到目标元素。使用ID、类名、CSS选择器或XPath等定位方法,但应确保选择的定位方法足够准确且不易受到页面结构的变化影响。

  3. 使用XPath或CSS选择器: XPath和CSS选择器是两种强大的定位元素的方法,它们可以更精确地定位元素,并且相对于使用标签名称或类名等定位方法更加稳定。

  4. 避免使用绝对路径: 尽量避免使用绝对的XPath路径来定位元素,因为页面结构的变化可能会导致绝对路径失效。尽量使用相对路径或其他更稳定的定位方法。

  5. 使用try-catch处理异常: 在执行操作之前,使用try-catch语句来捕获可能出现的异常情况,例如元素未找到或不可点击等异常,在捕获到异常时可以进行相应的处理或重试操作。

  6. 检查元素可见性和可点击性: 在执行操作之前,可以先检查目标元素是否可见和可点击,以确保元素在执行操作时处于正确的状态。可以使用Selenium提供的is_displayed() 和is_enabled()方法。

  7. 日志记录和错误处理: 在测试代码中添加适当的日志记录功能,以便在出现问题时能够更容易地定位和调试错误。另外,编写健壮的错误处理代码,以处理可能出现的异常情况并进行适当的反馈或重试操作。【规范开发人员开发习惯,给页面元素添加唯一的name,id】

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

  •  优化测试用例,设置等待时间的时候,少用固定等待(sleep),尽量不使用隐式等待,多用显示等待

  • 减少不必要的操作步骤,如经过三四步才能打开要测试的页面的话,可以直接通过网址来加载

  • 元素定位多用id等,定位速度较快

  • 中断页面接在,如果加载的内容不影响我们测试,就设置超时时间,中断页面加载

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

1.在经常检测失败的元素前尽量加上显式等待时间,等要操作的元素出现之后再执行下面的操作;

2.多线程的时候,减少测试用例耦合度【两个模块之间相互交互】,因为多线程的执行顺序是不受控制的;
3.多用 try捕捉,处理异常:
4.尽量使用测试专用环境,避免其他类型的测试同时进行,对数据造成干扰【例如:当前正在搜索A用户,但数据库那边正在删除A用户信息,就会导致测试不通过】
5.测试用例框架里面设置失败重跑机制【可以理解为对Bug的复现】

9.如何设计高质量自动化测试脚本

  • 使用四层结构实现业务逻辑、脚本、数据分离
  • 使用PO模式,将一个页面用到的元素和操作步骤封装在一个页面类中,如果一个元素定位发生了改变,我们只需要修改这个页面的元素属性
  • 对于页面类的方法,尽量从客户的正向逻辑去分析,方法中是一个独立场景,例如:登录到退出,而且不能把所有的步骤都封装在一个方法中
  • 测试用例设计中,减少测试用例之间的耦合度

10.你的自动化用例的执行策略是什么?【同问题4】

11.什么是持续集成?

CI/CD

频繁的将代码集成到主干,持续性的进行项目的架构,以便能够快速发现错误

12.自动化测试的时候是不是需要连接数据库做数据校验?

是的,需要确保页面显示或接口返回数据与数据库匹配,是断言的重要内容

13.如何定位页面上动态加载的元素?

首先出发动态事件,然后在定位,如果是动态菜单,则需要层级定位

14.如何定位属性动态变化的元素?

  1. 先找该元素不变的属性,钥匙都变,那就找不变的父元素,用层级定位
  2. 通过相对位置来定位,例如XPath的轴,兄弟级/父级/子级定位

 15.点击链接以后,selenium是否会自动等待该页面加载完毕?

不会,有时候当selenium并未加载完一个页面时再请求页面资源,则会误报不存在此元素,因此,首先应该首先考虑,selenium是否加载完此页面,其次再通过函数查找该元素

selenium是否加载完此页面:可以通过显示等待【explicit wait】来判断页面是否加载完毕

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECdef is_page_loaded(driver, timeout=10):try:# 设置等待时间wait = WebDriverWait(driver, timeout)# 等待页面加载完成,直到页面的某个元素可见wait.until(EC.visibility_of_element_located((By.TAG_NAME, 'body')))# 如果没有抛出超时异常,则页面已经加载完成return Trueexcept Exception as e:# 如果在等待过程中发生异常,说明页面加载失败或超时print("页面加载失败或超时:", e)return False

 16.什么是page Object【PO】设计模式?

通俗来讲,把每个页面当成一个页面对象,页面层写定位元素方法和页面操作方法,可以做到定位元素与脚本分离

核心框架就是分层+PO(page object)模式

PO模式:对代码分层进行优化,代码重用性强、维护性强、可读性、稳定性

Base 基类 一些公共的方法。比如:Web自动化测试中将获取浏览器驱动、定位元素、点击、截图等操作封装在Base基类中

page页面对象层:一个页面封装为一个对象 例如 计算器在线计算测试中 将计算加减乘除单独封装为一个页面类、或者将登录页面单独封装为一个类

scripts层 业务层 测试用例层:调用page页面,测试层

数据层:

日志层:

17.怎么去选择一个下拉框中value=XX的option?

  • 使用selenium中Select类,调用select_by_value("XX")【重点回答】
  • 也可以直接使用元素定位获取

 18.自动化测试用例哪里来?

先功能测试,再自动化测试,因此自动化测试用例从手工用例中提取

抽取主要的正向流程测试用例,进行自动化测试用例的开发和维护,提高自动化测试覆盖的内容,实现在下个版本中,自动化测试脚本可以尽可能的替代人工进行回归测试

19.你觉得自动化测试最大的缺陷是什么?

  • 不稳定
  • 可靠性不强
  • 不易维护
  • 成本与收益
  • 缺少手工测试的创造性和拓展性

webdriver不能用于做接口测试,是专门做UI自动化参数

20.当UI自动化运行过程中定位不到元素时可能存在哪些问题?

  •  元素定位方法写错了,页面上找不到该元素

  • 元素定位使用的是id定位,但id是动态的id 导致找不到元素

  • 元素定位表达式在页面上存在多个元素,单个元素定位方式就无法定位

  • 元素在表单内部,需要switch_to切换进入表单才能够定位到元素

frame表单切换
1.切换到指定表单
driver.switch_to.frame(frame_referance)
2.恢复到默认页面
driver.switch_to.default_content()"""填写主页面"""
# 用户名
driver.find_element(By.CSS_SELECTOR, "#user").send_keys("admin")# 切换到注册A
driver.switch_to.frame("myframe1")
"""填写注册A"""
driver.find_element(By.CSS_SELECTOR, "#userA").send_keys("adminA")# 恢复到默认页面
driver.switch_to.default_content()
  • 页面元素还没有加载进来,也会导致定位不到元素

  • 上一步动作切换了页面,需要通过句柄switch_to切换到正确页面才能定位到元素

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/578461.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言最大公约数(辗转相除法)

输入两个整数,求他们的最大公约数: 如果我们不用辗转相除法的话,两个整数的最大公约数,我们就可以定义一个整数为两个整数中最小的那个数,然后两个整数一起除我们新定义的整数,如果都除尽了,这…

云服务器8核32G配置租用优惠价格94元/月、1362元一年

8核32G云服务器京东云轻量云主机价格94元1个月、282元3个月、673元6个月、1362元一年,配置8C32G-100G SSD系统盘-10M带宽-2000G月流量 华北-北京,京东云优惠活动 yunfuwuqiba.com/go/jd 活动链接打开如下图: 8核32G云服务器京东云轻量云主机价…

COLMAP 【Feature matching】特征匹配参数解释

(Windows)Colmap 具体使用教程可参考我的这篇博文 windowscolmap实现SFM三维重建位姿估计-CSDN博客 下面只是matching参数解释 Matching这个阶段很重要,匹配方式不同会对最终结果影响很大,要根据实际情况选择合适的匹配方式。下…

搜索与图论——bellman—ford算法、spfa算法求最短路

bellman-ford算法 时间复杂度O(nm) 在一般情况下&#xff0c;spfa算法都优于bf算法&#xff0c;但遇到最短路的边数有限制的题时&#xff0c;只能用bf算法 bf算法和dijkstra很像 #include<iostream> #include<queue> #include<cstring> #include<algori…

vue3封装Element表格

配置表头配置多选配置序号自定义操作列按钮 封装表格 Table.vue <template><el-table:data"tableData"width"100%":maxHeight"maxHeight"v-bind"$attrs"selection-change"handleSelectChange"row-click"hand…

浪潮信息AIStation与潞晨科技Colossal-AI 完成兼容性认证!

为进一步提升大模型开发效率&#xff0c;近年来&#xff0c;浪潮信息持续加强行业合作&#xff0c;携手业内头部&#xff0c;全面进攻大模型领域。日前&#xff0c;浪潮信息AIStation智能业务创新生产平台与潞晨科技Colossal-AI大模型开发工具完成兼容性互认证。后续&#xff0…

ElasticSearch学习篇11_ANNS之基于图的NSW、HNSW算法

前言 往期博客ElasticSearch学习篇9_文本相似度计算方法现状以及基于改进的 Jaccard 算法代码实现与效果测评_elasticsearch 文字相似度实现方法-CSDN博客 根据论文对文本相似搜索现状做了一个简要总结&#xff0c;然后对论文提到的改进杰卡德算法做了实现&#xff0c;并结合业…

互联网轻量级框架整合之JavaEE基础

不得不解释得几个概念 JavaEE SUN公司提出来的企业版Java开发中间件&#xff0c;主要用于企业级互联网系统的框架搭建&#xff0c;同时因为Java语言优质的平台无关性、可移植性、健壮性、支持多线程和安全性等优势&#xff0c;其迅速成为构建企业互联网平台的主流技术&#x…

[Python人工智能] 四十五.命名实体识别 (6)利用keras构建CNN-BiLSTM-ATT-CRF实体识别模型(注意力问题探讨)

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前文讲解融合Bert的实体识别研究,使用bert4keras和kears包来构建Bert+BiLSTM-CRF模型。这篇文章将详细结合如何利用keras和tensorflow构建基于注意力机制的CNN-BiLSTM-ATT-CRF模型,并实现中文实体识别…

三菱Q系列PLC以太网TCP通讯FB块源码

三菱Q系列PLC的tcp通讯&#xff0c;客户端和服务器两个变量好用的FB块&#xff0c;调用块就可以实现通讯连接&#xff0c;不需要自己写程序&#xff0c;简单配置引脚就可以。该块还集成了断网&#xff0c;连接错误&#xff0c;发送接收数据错误报警等功能。具体功能见下面介绍.…

每日学习笔记:C++ STL迭代器种类与辅助函数

头文件 一般在声明容器头文件即可&#xff0c;特殊的迭代器需要声明<iterator> 迭代器种类 输出迭代器 输入迭代器 向前迭代器 双向迭代器 随机访问迭代器 Vector迭代器递增递减 使用std::next(coll.begin())替代coll.begin() 迭代器辅助函数 advance() next() …

深入MNN:开源深度学习框架的介绍、安装与编译指南

引言 在人工智能的世界里&#xff0c;深度学习框架的选择对于研究和应用的进展至关重要。MNN&#xff0c;作为一个轻量级、高效率的深度学习框架&#xff0c;近年来受到了众多开发者和研究人员的青睐。它由阿里巴巴集团开源&#xff0c;专为移动端设备设计&#xff0c;支持跨平…