1 UI自动化框架如何让搭建?
首先按照Po模式搭建自动化框架,搭建框架使用的技术是selenium + pytest ,将框架分为6层,common层(公共层:basepage[基础操作封装]、hander_config[ini配置文件]、hander_path[路径]、my_logger[日志分装])、conf(配置层:ini文件、yaml文件)、outputs(日志输出层)、pageobject、pagelocators、testcases、testdatas。
2 UI自动化测试中定位方式有哪些?常用的有哪些?
"8大定位方式,id 、class、text、tag、link 、partial link 、xpath、css,常用的id、text、xpath、class、link
3 UI自动化测试有哪些缺点?如何改进?
不稳定,页面经常变,不好定位,不适合业务复杂和频繁变动的项目尽可能的使用显性等待
4 UI自动化中三种等待?
sleep()强制等待 始得线程强制处于睡眠状态
driver.implicitly_wait()隐形等待 ,设置的时全局等待,调用一次就够了
webdriverwait()显性等待 等待方式expected_conditions 特定的元素都设置自己的等待方式进行等待
5 PO设计模式的原理?
原理:Po模式成为页面对象模型,是将页面操作与用例分离,将页面操作和元素定位分装成page层,页面的测试用例和数据分装为text层
6 Unittest框架有什么缺点?
创建测试用例不如pytest灵活、创建用例上测试报告也不如pytest的aller报告清晰美观
7 pytest和unittest区别?
pytest:
创建:文件名test_或 *_test开头 类Test开头 函数test_开头就可以自动识别,直接函数test_也可以识别
运行:pytest.main(""-s"",""-v"",""html=hello.html"",""_allerdir=outputs/word.html"")
报告:以参数的方式添加运行中
断言:assert a=b
前置条件:
方法一:deardown,setup,deardown_class,setup_class
方法二:创建一个conftest.py文件用来编写前置条件,使用fixtrue(),四个级别,默认函数级别,funaction/class/moder/pagage/session,前后置写在一起,用yaid分割开,返回信息写再yaid后面;调用的时候使用pytest.make.usefixture(参数)参数只前后置的函数名称。
传入参数为字典时:pytest.mark.parametrize(“case”,字典),用例调用直接以参数的方式传入case即可
冒烟测试:创建配置文件pytest.ini文件,写入固定格式,pytest.make.配置文件参数名,运行“-m=配置文件参数名”
unittest:
创建:文件名test_开头 类继承unittest.testcase 函数test_开头
运行:加载测试用例:testcases = unittest.testloader().discover(test_case_dir),
套件创建:suite=unittest.testsuite(),
将用例放在套件中:suite.addTest(testcases)
执行套件:unitest.texttestrunner.run(suite)
报告:第三方插件bf = BeautifulReport(),将收集的用例添加报告中
断言:assertnotequest(a,b)
前置条件:deardown,setup,deardownclass,setupclass
8 Webdriver的原理
由于python语言不能与浏览器直接通信。这时候webdriver就充当了一个翻译器,将python脚本翻译成一个浏览器可以识别的语言(js)。首先python脚本创建一个session会话,再session中通过http请求像webdrivwer发送请求,webdriver接收到信息,再解析发送为浏览器,浏览器接收到请求后,返回请求结果到webdriver中,webdriver做一些分装后返回给python脚本,根据返回值就能判断对浏览器的操作是不是执行成功。
9 如何把自动化测试在公司中实施并推广起来的?
1.确定自动化使用的框架、技术
2.搭建自动化框架
3.完善自动化框架,形成流程化文档
4.推广至其他项目组使用
10 请描述一下自动化测试流程?
1.制定测试方案
2.设计测试用例,并进行评审
3.搭建自动化框架
4.编写测试脚本
5.维护测试脚本
6.设置无人值守测试运行
7.优化测试脚本
11 自动化测试用例如何编写?
使用其他组员已经编写好的用例进行挑选。编写主要的流程用例。因为一般自动化测试都是用来回归测试和冒烟测试使用。
12 上一个项目中自动化测试的执行策略?
设置的是早上2点钟自动执行用例,执行完后将执行结果以邮件的方式发送给测试人员以及相关人员手中。
13 自动化测试发现BUG多吗?
没又多少bug,因为一般自动化测试都是已经进行过手工测试的,并且都是回归测试。
14 你觉得自动化测试的价值在哪里?你们公司为什么要做自动化测试?
做自动化是为了后期减少回归测试的工作量。后期回归测试时能够及时发现问题,及实报告修改。
15 自动化测试有误报过bug吗?产生误报怎么办?"有无误报过,
主要原因:
1.元素定位不稳定,需要完善元素定位的方式
2.开发将页面做了修改调整,测试未能及时的调整,完善
16 自动化测试过程中,你遇到了哪些问题,是如何解决的?
1.元素定位不稳定
2.自动化出现误报
3.自动化测试报告文件覆盖问题,文件添加时间
4.自动化测试维护比较麻烦
5.数据库校验比较有难度"
17 在上一家公司做自动化测试用的什么框架?
python+Selenium+pytest+aller
python +unittest+BeautifulReport
18 在selenium自动化测试中,你一般完成什么类型的测试?自动化覆盖率?
主要是冒烟测试和回归测试。回归测试主要写一些功能稳定的场景,通过自动化手段去实现,节约测试时间。因为自动化测试用例也是在不断的更新和迭代,没有刻意去统计,大概在30%-40%左右
19 在执行脚本过程,如何实现当前元素高亮显示?
这个其实就是利用javaScript去修改当前元素的边框样式来到达高亮显示的效果,
20 如果一个元素无法定位,你一般会考虑哪些方面的原因?
1.页面加载元素过慢,加等待时间
2.页面有frame框架页,需要先跳转入frame框架再定位
3.可能该元素是动态元素,定位方式要优化,可以使用部分元素定位或通过父节点或兄弟节点定。
4.可能识别了元素,但是不能操作,比如元素不可用,不可写等。需要使用js先把前置的操作完成。
21 遇到frame框架页面怎么处理?
先切换至driver.switch_to.iframe里面,再进行定位,完成操作再driver.switch_to.default_content()跳出来
22 遇到alert弹出窗如何处理?
切换至driver.switch_to.alert(),再操作accept、dismiss、text()
23 如何处理多窗口?
1. 首先获取所有窗口的句柄hand = driver.window_handles()
2.切换至最后一个窗口driver.switch_to_window(hand[-1])
3.再操作元素
24 怎么验证元素是enable/disabled/checked状态?
enable 启用 is_enable() 是否启用
disabled 禁用 is_displalyed() 是否禁用
checked 默认选中 is_selected() 是否选中
25 如何处理下拉菜单
html源码中如果不是select下拉框,需要定位到元素,直接点击选择即可。如果源码中是select下拉框,需要调用selenium中的Select类,使用下标,name的值,文本定位三种方法都可以定位到。
26 在日历这种web 表单你是如何处理的?
如果日历输入框不可以输入,需要借助调用js,使用js将disable属性去掉,就可以直接输入了;如果日历输入框直接可以输入,定位到元素后,直接调用send_keys()方法输入即可。
27 举例一下说明一下你遇到过那些异常?
常见的selenium异常有这些:
NoSuchElementException:没有该元素异常
TimeoutException : 超时异常
ElementNotVisibleException :元素不可见异常
NoSuchAttributeException :没有这样属性异常
NoSuchFrameException :没有该frame异常"
28 关闭浏览器中quit和close的区别
quit时关闭全部窗口,close是关闭当前窗口
29 在Selenium中如何实现截图?如何实现用例执行失败才截图?
driver.save_screenshot(),再用例执行过程中调用页面操作,页面操作如果失败的时候调用截图方法。
30 如何实现文件上传?
pywinauto第三方插件,使用send_keys(地址)类,send_keys("{VK_RETURN}")
31 你写的测试脚本能在不同浏览器上运行吗?
可以的,更换webdriver驱动和调用的浏览器的。可以将更换浏览器分装一下,浏览器数据从ini文件中获取即可。
32 鼠标如何操作数据?
ActionChains方法列表
click(on_element=None) ——单击鼠标左键
click_and_hold(on_element=None) ——点击鼠标左键,不松开
context_click(on_element=None) ——点击鼠标右键
double_click(on_element=None) ——双击鼠标左键
drag_and_drop(source, target) ——拖拽到某个元素然后松开
drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开
key_down(value, element=None) ——按下某个键盘上的键
key_up(value, element=None) ——松开某个键
move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标
move_to_element(to_element) ——鼠标移动到某个元素
move_to_element_with_offset(to_element, xoffset, yoffset) ——移动到距某个元素(左上角坐标)多少距离的位置
perform() ——执行链中的所有动作
release(on_element=None) ——在某个元素位置松开鼠标左键
send_keys(*keys_to_send) ——发送某个键到当前焦点的元素
send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素"
标签:面试题,元素,element,用例,pytest,ui,测试,自动化 From: https://www.cnblogs.com/Happy-Girl-T/p/16824262.html