Python自动化测试面试题分享(含答案)

2024-01-09

1、如果页面元素经常发生需求变化,你是如何做?

利用po模式,业务逻辑和测试逻辑相分离,当某个页面经常发生变化只需要维护页面,包括元素定位表达式,封装业务方法;不需要修改测试逻辑;

页面经常变化正是自动化测试的痛点,我们改不了需求,目前利用po模式是最有效的解决方法。

2、在你做自动化过程中,遇到了什么问题吗?举例下

a、页面经常变化,需要修改脚本
b、脚本不稳定,经常性的跑失败
c、提升效率,会影响稳定性

3、如何处理alert弹窗

先切换到弹窗:alert=driver.switch_to.alert
确认:alert.accept()
取消:alert.dismiss()
获取弹窗中文本:alert.getText()
弹窗中输入内容:alert.sendkeys()

4、在selenium中如何处理多窗口?

以百度浏览器测试:

a、获得百度浏览器的搜索页面窗口

search_window=driver.current_window_handle

b、点击“hao123”标签,跳转到hao123页面

driver.find_element_by_xpath('//a[text()="hao123"]').click()
time.sleep(2)

c、获取所有的窗口句柄

all_handles=driver.window_handles

d、切换到hao123页面

for handle in all_handles:
	if handle!=search_window:
		driver.switch_to.window(handle)
		driver.find_element_by_xpath('//a[text()="网易"]').click()

e、如果再次切换到搜索页面

driver.switch_to.window(search_window)

5、你查找元素遇到过在Frame里面吗?你是如何处理Frame里面元素定位的?

切换到frame中

def switch_frame(frame_el):
	driver.switch_to.frame(frame_el)
	el=driver.find_element_by_xpath('//input[@id="kw"]')
	el.input('kobe')
	
frame_el=driver.find_element_by_xpath('//iframe[@name="baidu"]')	
switch_frame(frame_el)

回到主页中

driver.switch_to.default_content()

6、如何处理下拉菜单?

a、通过text文本查找

def select(el):
	s=Select(el)	#初始化Select对象
	s.select_by_visible_text('kobe')
el=driver.find_element_by_xpath('//select[@id="faver"]')

b、通过value值查找

def select(el):
	s=Select(el)
	s.select_by_value('double')
el=driver.find_element_by_xpath('//select[@id="faver"]')

同时,在这我为大家准备了一份软件测试视频教程(含面试、接口、自动化、性能测试等), 就在下方,需要的可以直接去观看,也可以直接 【点击文末小卡片免费领取资料文档】

软件测试视频教程观看处:

【2024最新版】Python自动化测试15天从入门到精通,10个项目实战,允许白嫖。。。

7、关闭浏览器中quit和close的区别?

driver.quit():关闭整个浏览器
driver.close():关闭当前页
quit一般用在结束测试之前的操作,close用在执行用例过程中关闭某一个页面的操作

8、如何实现文件上传(待补充)?

第一种方法:send_keys

a、找到上传文件的入口
b、获取入口的元素的表达式(file_el)
c、上传文件

file_el.send_keys(r'c:\666.doc')第二种方法:pywinauto

    def upload_file(self):
        # 点击上传文件按钮
        self.browser.find_element_by_xpath('//span[contains(text(),"点击上传")]').click()
        # 使用pywinauto来选择文件
        app = pywinauto.Desktop()
        # 选择文件上传的窗口
        dlg = app['打开']
        # 选择文件地址输入框,点击
        dlg['Toolbar3'].click()
        # 键盘输入上传文件的路径
        send_keys(r'C:\Users\Lenovo')
        # 键盘输入回车键,打开该路径
        send_keys('{VK_RETURN}')
        # 选中文件名输入框,输入文件名
        dlg['文件名(&N):Edit'].type_keys('1.jpg')
        # 点击打开
        time.sleep(2)
        #dlg['打开(&O)'].click()
        dlg['打开(&O)'].double_click()
        time.sleep(2)
        return self

9、如何实现鼠标悬停,键盘事件和拖拽动作?

a、鼠标悬停

1、初始化一个action_chains对象
action=ActionChains(driver)
2、找到要悬浮的元素,
setting_el=driver.find_element_by_xpath(‘//span[@id=“s-usersetting-top”]’) -----> 设置
3、调用鼠标操作的函数,传入move_to_element()函数中
action.move_to_element(setting_el)
4、要让动作生效的话,必须加上perform
action.move_to_element(setting_el).perform()
5、再定位到高级设置标签
top_setting_el=driver.find_element_by_xpath(‘//a[text()=“高级搜索”]’)
top_setting_el.click()

b、拖拽动作

def drag_and_drop(el1,el2)
	action=ActionChains(driver)
	action.drag_and_drop(el1,el2)
	action.proform()
drag_and_drop(el1,el2)

c、双击

def double_click(el)
	action=ActionChains(driver)
	action.double_click(el)
	action.perform()
double_click(el)

10、在selenium自动化测试中,你一般完成什么类型的测试?

项目稳定

回归测试

监控

11、自动化测试有误报过bug吗?产生误报怎么办(*)?

有误报过,有时候自动化测试报告中显示发现了bug,实际去通过手工测试去确认又不存在该bug。
误报原因一般是:
a、元素定位不稳定(没有进行等待或者等待时间设置的太短;元素是动态变化的,需要优化元素表达式),
b、需要尽量提高脚本的稳定性(使用独立的测试环境,用例与用例之间要相互独立,尽量不要耦合性太强);
c、开发更新了页面但是测试没有及时更新维护!
d、网络问题(页面加载太慢)

12、自动化测试过程中,你遇到了哪些问题,是如何解决的(*)?

效率和稳定性
需求进行大改,代码需要维护
产生误报,原因:11题

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

a、不要使用强制等待
b、尽量减少不必要的操作
c、减少不必要的io操作
d、尽量使用独立的测试环境,避免其他人修改环境配置
e、用例与用例尽量不要关联,减少用例的耦合性
f、用xpath的相对表达式
g、减少for循环中代码的执行次数
h、多个if条件表达式中尽量把执行频率最高的语句写到最前面
i、定期清理浏览器缓冲,防止浏览器卡顿

14、怎么对含有验证码的功能进行自动化测试

万能码
开发关掉

15、自动化测试的使用场景(重要)?

a、需求稳定,不会频繁变更。
b、研发和测试周期长,需要频繁执行回归测试。
c、需要在多种平台上重复运行相同测试的场景。
d、某些测试项目,通过手工测试无法实现,或者手工成本太高。
e、被测软件的开发较为规范,能够保证系统的可测试行
f、线上监控

16、请描述一下自动化测试流程(重要)?

a、编写自动化测试计划
b、设计自动化测试用例
c、编写自动化测试框架
d、脚本调试
e、执行测试用例、无人值守测试
f、后期脚本维护(添加测试用例、开发更新版本)

17、web和app自动化有什么不同(重要)?

a、启动差别

一部手机只能同时测试一个apk包
web端,由于多进程,一台电脑可以开启多个浏览器进行测试

b、安装差别

app端:需要先检查软件是否安装才能进行测试
web端:不需要安装,在浏览器中输入url就可以测试。

c、页面元素操作

d、采用自动化测试框架不同
selenium
appium

18、http和https不同点(重要)

a、HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议。
b、HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
c、HTTP 的连接很简单,是无状态的。HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)

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

a、脚本中加入隐形等待和显性等待
b、必要的时候使用强制等待
c、try 方式进行id,name,clas,x path, css selector不同方式进行定位,如 果第一种失败可以自动尝试第二种
d、需要在指定的frame和窗口中

20、鼠标操作常用函数(待补充)

context_click() 右击 --> 此方法模拟鼠标右键点击效果
double_click() 双击 --> 此方法模拟双标双击效果
drag_and_drop()拖动 --> 此方法模拟双标拖动效果
move_to_element() 悬停 --> 此方法模拟鼠标悬停效果
perform() 执行 --> 此方法用来执行以上所有鼠标方法

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python自动化测试面试题分享(含答案) 的相关文章

  • 为什么Python有最大递归深度?

    Python有最大递归深度 但没有最大迭代深度 为什么递归受到限制 把递归当成迭代来对待 而不限制递归调用的次数不是更自然吗 我只想说这个问题的根源来自于尝试实现流 参见这个问题 https stackoverflow com questi
  • python中热图的层次聚类

    我有一个 NxM 矩阵 其值范围为 0 到 20 我可以使用 Matplotlib 和 pcolor 轻松获得热图 现在我想使用 scipy 应用层次聚类和树状图 我想重新排序每个维度 行和列 以显示哪些元素相似 根据聚类结果 如果矩阵是方
  • 带有指针数组的 cython

    我在 python 中有一个 numpy ndarrays 列表 具有不同的长度 并且需要非常快速地访问 python 中的列表 我认为指针数组就可以解决问题 我试过 float type t list of arrays no of ar
  • 美丽的汤从谷歌搜索中提取href

    谷歌搜索给出了以下 HTML 的第一个结果 h3 class r a href https rads stackoverflow com amzn click com 0470284889 class l vst em Quantitati
  • 如何使用 pandas 选择所有非 NaN 列和非 NaN 最后一列?

    如果标题有点令人困惑 请原谅我 假设我有test h5 下面是使用读取该文件的结果df read hdf test h5 testdata 0 1 2 3 4 5 6 0 123 444 111 321 NaN NaN NaN 1 12 2
  • Pyenv 无法在 Cygwin 上安装 python: ModuleNotFoundError: No module named '_ctypes'

    我正在尝试设置 Cygwin 环境以使用 pyenv 来管理 python 版本 我没有管理员权限 所以我使用以下命令运行设置 no admin flag 我使用 Cygwin 包管理器应用程序解决了一些依赖关系 但我被困在了这一点上 Mo
  • 无法在 mysql 表中的值中使用破折号(-)[重复]

    这个问题在这里已经有答案了 我一直在尝试从 python 将数据插入 MYSQL 表 我的sql表中的字段是id token start time end time和no of trans 我想存储使用生成的令牌uuid4在令牌栏中 但由于
  • 将打开关闭的 Google Chrome 浏览器添加到 Selenium linkedin_scraper 代码中

    我正在尝试抓取一些知名人士的 LinkedIn 个人资料 该代码获取一堆 LinkedIn 个人资料 URL 然后使用Selenium and scrape linkedin收集信息并将其作为 json 文件保存到文件夹中 我遇到的问题是
  • 将 matplotlib png 转换为 base64 以在 html 模板中查看

    背景 你好 我正在尝试制作一个简单的网络应用程序 按照教程计算阻尼振动方程 并将结果的 png 返回到 html 页面 然后将其转换为 Base64 字符串 Problem 该应用程序运行正常 只是在计算结果时返回损坏的图像图标 可能是因为
  • 在加载“cv2”二进制扩展期间检测到递归

    我有一个小程序 在 pyinstaller 编译后返回 opencv 错误 但无需编译即可工作 我在 Windows 10 上使用 Python 3 8 10 Program 导入 pyautogui将 numpy 导入为 np导入CV2
  • 当 DetailView 遇到时更新模型字段。 [姜戈]

    我有一个类似的 DetailViewviews py views py class CustomView DetailView context object name content model models AppModel templa
  • 在 MATLAB 中创建共享库

    一位研究人员在 MATLAB 中创建了一个小型仿真 我们希望其他人也能使用它 我的计划是进行模拟 清理一些东西并将其变成一组函数 然后我打算将其编译成C库并使用SWIG https en wikipedia org wiki SWIG创建一
  • 提交表格并上传带有请求的文件

    我正在努力提交特定的表格蟒蛇请求 http www python requests org 我想使用它的网站上的其他表单工作正常 我可以提交登录表单等 这只是我遇到问题的文件上传 显然 提交表单效果很好 因为我从网站收到一条消息 说 请返回
  • 在Python中计算结构体的CRC

    我有以下结构 来自 C 中的 NRPE 守护程序代码 typedef struct packet struct int16 t packet version int16 t packet type uint32 t crc32 value
  • Flask SQLAlchemy 与 MyPy - 模型类型错误

    我遇到了以下组合问题flask sqlalchemy and mypy 当我定义一个新的 ORM 对象时 例如 class Foo db Model pass where db是使用创建的数据库SQL炼金术应用于flask app mypy
  • 使用 Flask-SQLAlchemy 进行多对多多数据库连接

    我正在尝试使这个多对多联接与 Flask SQLAlchemy 和两个 MySQL 数据库一起工作 并且它非常接近 只是它为联接表使用了错误的数据库 这是基础知识 我有main db and vendor db 表格设置为main db u
  • 从 Python 中编译的正则表达式中提取命名组正则表达式模式

    我有一个 Python 正则表达式 其中包含多个命名组 但是 如果先前的组已匹配 则可能会错过与一组匹配的模式 因为似乎不允许重叠 举个例子 import re myText sgasgAAAaoasgosaegnsBBBausgisego
  • 在 scrapy 中将基本 url 与结果 href 结合起来

    下面是我的蜘蛛代码 class Blurb2Spider BaseSpider name blurb2 allowed domains www domain com def start requests self yield self ma
  • 在 Tensorflow 2.0 中的简单 LSTM 层之上添加 Attention

    我有一个由一个 LSTM 和两个 Dense 层组成的简单网络 如下所示 model tf keras Sequential model add layers LSTM 20 input shape train X shape 1 trai
  • Jinja2中获取请求参数

    如何检索请求参数a在 Jinja2 模板中 http foo bar a 1 我这个答案有点晚了 但其他解决方案并没有真正考虑到您对 Flask 的使用 事实上 您将 Flask 与 Jinja2 一起使用 这使得您的情况与其他框架有点不同

随机推荐

  • MySQL中设置自增主键id从1开始

    可能遇到过这种问题 当你只想新增一条数据时 发现使用Insert语句后 发现id并不是从1开始的 握草 怎么回事 其实很简单 通过执行一下SQL 对应你的表就可以解决 ALTER TABLE user AUTO INCREMENT 1 具体
  • 题解 | #链表中的节点每k个一组翻转#C++暴力遍历解法

    求大家投下我们腾讯吧 发的一堆sp被鸽了 大数据面试题 Hive 华为14A还是保研华中科技大学 求大家投下我们腾讯吧 发的一堆sp被鸽了 终极 2024校招八股文 MySQL索引 第一篇 招芯片验证实习生 碰到渣导悲哀3年 给秋招画个句号
  • 锚定「中央计算+区域控制」,确定性机遇已凸显!

    中央计算 区域控制 的新一代整车电子架构 已经成为车企继电动化 智能化后的新竞争焦点 有关整车计算与域控 业界普遍认为将过去在不同域 座舱 智驾等 功能转移到集中的计算平台 可以更容易地进行整车OTA 以及灵活部署新功能 同时 基于通用操作
  • Web测试是在测什么?容易被忽视的小细节总结!

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 2k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 网页bug怎么都测不出来?赶紧进来看看吧

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 2k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • Vue:通过ref获取DOM元素

    一 场景描述 我们在页面的开发过程中 经常需要操作 dom 元素 来实现我们需要的效果 以往 js 中 我们是通过给 dom 添加 id 然后 通过 js 代码 document 来获取这个 dom 简写代码案例 h2 这里是h2标签 h2
  • 【计算机开题报告】基于JSP的服装店销售管理系统

    1 选课目的意义 21世纪是一个信息化时代 随着中国经济的发展和人民生活水平的提高 服装商场的普及程度日益增大 竞争也在逐渐白炽化 为了进一步提高服装商场的经营效率 在服装店销售管理中引入计算机管理系统成为了必然的选择 由于中国环境的特殊性
  • 软件测试开发/全日制/测试管理丨用户端 Web 自动化测试

    随着Web应用的普及和不断发展 用户端Web自动化测试成为确保Web应用质量的重要手段 这种测试方法不仅提高了测试效率 也帮助团队及时发现和解决潜在问题 确保用户体验的连贯性和稳定性 工具选择 用户端Web自动化测试的第一步是选择适当的工具
  • 【计算机开题报告】二手车交易平台

    一 选题依据 简述国内外研究现状 生产需求状况 说明选题目的 意义 列出主要参考文献 选题目的 意义 如今时代网络技术正在快速发展 电子商务技术也以极为强势的姿态闯入人们的视野之中 随着人们生活质量的提升 为了对身边二手物品进行回收利用 二
  • 如何用CHAT写新能源颗粒报告?

    问CHAT 写一份新能源颗粒报告 CHAT回复 新能源颗粒 也就是生化质能源颗粒 以其清洁 可再生的特性 在环保能源市场上拥有越来越广泛的应用 以下为对于新能源颗粒行业的一份报告 1 行业概述 新能源颗粒来源广泛 主要包括农业废弃物 林业废
  • springboot git配置文件自动刷新失败问题排查

    http ip port refresh 说明 springBoot版本是1 5 9 接口路径与2 x 不同 路径区别 refresh VS actuator refresh 用postman调用refresh接口刷新git配置 报错如下
  • 系列六、IO流 - 节点流 & 处理流

    一 节点流 处理流 1 1 节点流概述 节点流可以从一个特定的数据源读写数据 例如FileReader FileWriter 1 2 处理流概述 处理流 包装流 是连接在已存在的流之上 为程序提供更为强大的读写功能 例如BufferedRe
  • RT-Thread 内核基础(六)

    RT Thread内核配置示例 RT Thread的一个重要特性是高度可裁剪性 支持对内核进行精细调整 对组件进行灵活拆卸 配置主要是通过修改工程目录下的rtconfig h文件来进行 用户可以通过打开 关闭该文件中的宏定义来对代码进行条件
  • 软件测试开发/全日制/测试管理丨Docker容器技术

    Docker 是一种轻量级的容器技术 通过将应用程序及其所有依赖项封装到一个可移植的容器中 实现了应用程序的便携性 可部署性和可伸缩性 下面是关于 Docker 容器技术的主要概念和优势 主要概念 容器 Container 容器是一个轻量级
  • MySQL 通用表空间的这几个选项你会用么?

    在 MySQL 数据库中有效管理存储和性能至关重要 通用表空间为实现这一目标提供了灵活性 本文讨论通用表空间并探讨其功能 优点和实际用法 并附有说明性示例 什么是通用表空间 与默认保存系统表的单个系统表空间不同 通用表空间是用户定义的多个
  • 【计算机开题报告】智能社区管理系统

    一 设计目的及意义 随着经济的发展 人们生活水平的提高 工作和日常事务繁忙 人们对服务就有了更深入 更精细的要求 而计算机技术的迅猛发展 使得这种需求变为可能 传统的社区服务业也与互联网技术结合更加密切 这是社会发展的必然趋势 为解决社区中
  • HttpRunner(22):httprunner设置代理及请求证书验证

    httprunner设置代理 httprunner 库本身没有提供设置代理的接口 但是底层使用了urllib requests 等库 可以设置HTTP PROXY 和HTTPS PROXY 环境变量 常用的网络库会自动识别这些环境变量 日常
  • PostMan进行并发压测流程

    需求 两个记账接口在同一时间大量处理同一账户账务时 锁表顺序不同导致死锁 在修改完代码后模拟生产记账流程进行测试 需要对两个接口进行并发测试 在进行压测的时候 需要对流水号进行递增 处理流程 1 新建Collections 2 设置全局变量
  • 软件测试/测试开发全日制培训|Pytest的异常处理

    前言 在断言一些代码块或者函数时会引发意料之中的异常或者其他失败的异常导致程序无法运行时 使用 raises 捕获匹配到的异常可以让代码继续运行 Python的异常处理 try except else finally 示例如下 try pr
  • Python自动化测试面试题分享(含答案)

    1 如果页面元素经常发生需求变化 你是如何做 利用po模式 业务逻辑和测试逻辑相分离 当某个页面经常发生变化只需要维护页面 包括元素定位表达式 封装业务方法 不需要修改测试逻辑 页面经常变化正是自动化测试的痛点 我们改不了需求 目前利用po