python自动化测试面试题总结(一)(持续更新)

在这里插入图片描述

这里写目录标题

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"]')

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、web自动化测试过程中,你遇到了哪些问题,是如何解决的(*)(最新)

1、登录使用验证码的问题:

  • 解决方式:开发关闭严重码、万能验证码、设置白名单

2、文件上传:由2种方式

  • input类型:file_el=driver.find_element_by_name('user') file_el.send_keys(r'c:\666.doc')

  • 非input类型:需要第三方库:pywinauto

    • app=pywinauto.Desktop():选择文件

3、有些元素操作不方便,通过执行javaScript脚本更方便

  • 例如修改时间控件

    • 代码中实现修改文本框默认值操作:driver.execute_script(‘document.querySelector(“#train_date”).value=“2024-01-01”’)
  • js脚本滚动操作

    • driver.execute_script(‘document.querySelector(“.c-title.t.t.tts-title”).scrollIntoView()’)

4、一个元素明明定位到了,点击无效(也没报错)

  • 异步加载js导致点击事件无效 ,Selenium 有时候点击元素是会失效,使用js点击
    解决方案:自己封装一个显性等待,循环点击,直到可以操作下一个步骤;如果在指定的次数下还是没有反义,提bug

5、定位动态元素

  • 检查每次使用的这个元素的id是否一致,确定是否是否是动态元素;
    如果是动态元素,使用其他的定位方式,xpath或者css的相对定位

6、整个业务流程涉及关联的

  • 例如删除名字前面的复选框,名字是自己入参传的数据,当这条数据新增完成后,此时断言成功了,但是我要删除这条数据,一般这条数据前面是复选框,选中点击删除

    • 所以要将入参参数作为联系,以文本的定位方式找到复选框的元素定位表达式进行删除。

7、cookie复用

  • 前端修改了路由,需要批量查看路由是否正确,那就用到cookie复用了,如果不用cookie复用,那么就需要每个url去登录操作。

8、需求经常变动,脚本需要不断的修改

  • po模式的使用,用于回归测试

13、如何提高selenium脚本的执行速度(最新)

  • 尽量使用 by_css_selector() 方法;by_css_selector() 方法的执行速度比 by_id() 方法的更快,因为源码中 by_id() 方法会被自动转成 by_css_selector() 方法处理;

  • 使用等待时,尽量使用显示等待,少用 sleep(),尽量不用强制等待;

  • 尽量减少不必要的操作:可以直接访问页面的,不要通过点击操作访问;

  • 并发执行测试用例;

  • 尽量使用独立的测试环境,避免其他人修改环境配置

  • 使用独立的测试账号

  • 用例与用例尽量不要关联,减少用例的耦合性

  • 定期清理浏览器缓冲,防止浏览器卡顿

  • 不要选择太复杂的测试用例,按照用户的操作,从登录系统到完成一些业务流程

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

万能码
开发关掉
白名单

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

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

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

不管是手工测试、还是自动化测试,工作的实际内容都源自需求
对于自动化工作来讲,需求是来源于已经测试完成的手工测试用例

  • 1、确定功能测试的需求范围(需要转化哪些功能测试用例)
  • 2、制定自动化测试的计划(时间、人员分配、环境等等)
  • 3、确定自动化测试框架、语言、环境(语言、插件、环境都是有版本统一的要求)
  • 4、搭建自动化测试环境(python安装、下载依赖包、插件安装、数据库配置、文件支持格式——》需要支撑你的自动化脚本运行的环境,叫自动化测试环境)
  • 5、转化功能测试用例——》编写自动化代码,分工合作,也分周期(项目刚开展,第一阶段:写项目的核心流程;第二阶段:写项目核心流程的主分支;第三阶段:…)
  • 6、调试整个项目的自动化脚本(print、debug模式、日志的打印、异常处理)
  • 7、测试自动化的脚本执行(一旦本地没问题了,会引用到持续集成(CICD),定时执行自动化测试脚本)
  • 8、跟进自动化报告跟进项目的bug
  • 9、汇总自动化的项目报告
  • 10、没问题进行上线的产出

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() 执行 --> 此方法用来执行以上所有鼠标方法

在这里插入图片描述
在这里插入图片描述

  • 43
    点赞
  • 112
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 53
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 53
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

敲代码敲到头发茂密

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

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

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

打赏作者

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

抵扣说明:

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

余额充值