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() 执行 --> 此方法用来执行以上所有鼠标方法
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。