⾃动化⾯试常问问题
1.怎么判断元素是否存在?
判断元素是否存在和是否浮现不同,  判断是否存在乎味着如果这个元素压根就不存在,  就会抛出NoSuchElementException
这样就可以使⽤try catch,如果catchNoSuchElementException 就返回false。通常在项⽬中会把这个功能封装在isElementPresent⽅法
2.如何判断元素是否浮现?
判断元素是否浮现,存在两种情况,⼀种是该元素压根就没有,⾃然不会浮现;此外⼀种是有这样的元素,但是是hidden 可以通过先判断是否存在,如果不存在返回false;如果存在再去判断是否displayed。
5. 如何去定位页⾯上动态加载的元素? 触发动态事件,然后findElemnt
是动态菜单,需要⼀级⼀级find  (JS实现)
6.如何去定位属性动态变化的元素?
属性动态变化是指该element没有固定的属性值,所以只能通过相对位置定位
如通过xpath的轴,  parent/following-sibling /precent-sibling 等
此外可以尝试findbyelements遍历
8.⾃动化测试的时候是否需要连接数据库做数据校验?
⼀般来说1、  UI⾃动化不需要(很少需要);  2、接⼝测试会需要:从数据库层⾯来进⾏数据校验可以更⽅便验证系统的数据处理⽅⾯是否 确;
9.有⼏种元素常⽤定位⽅式,分别是?你最偏爱哪⼀种,为什么?
8:  id、name、class name、tag name、link text、partial link text、xpath、css selector 偏爱哪⼀种?答:
我最常⽤的是xpath  (或者CssSelector)因为不少情况下,  html标签的属性不够规范,⽆法通过单⼀的属性定位,这个时候就只能使⽤xpath可 去重实现定位唯⼀element
事实上定位最快的是Id,因为id是唯⼀的,然⽽⼤多数开辟并没有设置id。
10.怎么提⾼selenium脚本的⾃动化执⾏效率?
1.优化测试⽤例,尽可不使⽤ sleep,减少使⽤ImplicitlyWait
2.多使selenium的WebDriverWait/FluentWait,这样可以优化等待时间
3.减少不必要的操作步骤,如经过三四步才干打开我们要测试的页⾯的话,我们就可以直接通过⽹址来打开,减少不必要的操作。              4.中断页⾯加载,如页⾯加载的内容过多,我们可以查看⼀下加载慢的原因,如果加载的内容不影响我们测试,就设置超时时间,中断页 加载。
5.使⽤性能好的电                                                                                                                                            11.⽤例在运⾏过程中时常会浮现不稳定的情况,也就是这次可以通过,下次⽆法通过了,如何提⾼⽤例的稳定性? 1 ,查元素前先做判断:  ExpectedConditions ⾥⾯的各种⽅法;
2,显式等待:多使⽤WebDriverWait,加之显式等待时间,等要操作的元素浮现之后再执⾏下⾯的操作;
3、多⽤try catch捕获异常;
4,多线程的时候,减少测试例耦合度,因为多线程的执⾏顺序是不受控制的;
5 ,尽量使⽤测试专⽤环境,避免其他类型的测试同时进⾏,对数据造成⼲扰。
12.你的⾃动化⽤例的执⾏策略是什么?
1.⾃动化测试⽤例是⽤来监控的。集成到jenkins,创建定时任务定时执⾏;
2.有⽤例在产品上线前必须回归。 jenkins上将任务绑定到开辟的build任务上,触发执⾏;
为什么使用bootstrap?3.有些⽤例不需要时常执⾏。 jenkins创建⼀个任务,需要执⾏的时候⼈⼯构建即可。
13.什么是持续集成?
频繁的将代码集成到主⼲,持续性的进⾏项⽬的构架,以便能能够快速发现错误,防⽌分⽀⼤幅度偏离主⼲
14.webdriver client的原理是什么?
selenium启动以后  driver充当了服务器的⾓⾊,跟client和浏览器通信,  client根据webdriver协议发送请求给driver。driver解析请求,并 在浏览器上执⾏相应的操作,并把执⾏结果返回给client.
15.webdriver的协议是什么?
The Wire Protocol
16.启动浏览器的时候⽤到的是哪个webdriver协议?
http
18.怎去选择⼀个下拉框中的value =xx的option?
1.select类⾥⾯提供的⽅法:  selectByValue  (“xxx”)
2.xpath的语法也可以定位到
9 Appium 与 Selenium的关系
seleniumweb⾃动化,  appium是app端的⾃动化,  appium继承了webdriver(也就是selenium 2)
10 appium原理(加载流程)
⽤Andorid adb完成基本的系统操作
2)向Andriod上部署bootstrap.jar并启动
3) Forward Android 的端⼝到PC的机器上
4)  PC上监听端⼝接受请求,使⽤webdriver协议          5)分析命令并转通过forward的端⼝发给bootstrap.jar
6)  bootstrap受请求并把命令发给UiAutomator或者插桩体系


⼀、  Appium adb命令和问题
1⼿机和电脑连接,打开⼿机的开辟者模式打开USB调试
2、CMD中查看⼿机UDID: adb devices
3、CMD启动appium服务:
appium -a 127.0.0.1 -p 4723 – U ⼿机的UDID --no-reset
3、CMD中查看安卓版本号:
adb shell getprop ro.lease
4、获取apppackage和appactivite
Ⅰ 通打印⽇志获取:通过CMD(管理员运⾏)adb logcat>C:\;点击真机或者摹拟器中的应⽤后,按ctrl+c终⽌会⽣成的log⽇志;在⽇ 志中查 Displayed定位元素
Ⅱ 通过CMD获取:打开应⽤后输⼊:  adb shell dumpsys activity | findstr "mFocusedActivity 或者 adb shell dumpsys window w |findstr / |findstr name=
5、解决码完善运⾏后,程序⽆响应问题
直接CMD输⼊命令 adb shell 进⼊⼿机
进⼊⼿机之后,进⼊cd data/local/tmp
III 进⼊data/local/tmp⼊ ls 查看全部⽬录,应该有⼀个AppiumBootstrap.jar,可能你的名字是AppiumBoots或者AppiumBootstrap.j 输⼊ mv 加之查到的⽂件名 AppiumBootstrap.jar 命令解决,将你的⽂件名改为 AppiumBootstrap.jar
6、uiautomat序元素定位报错:
开CMD输⼊ adb kill-server 然后输⼊ adb start-server
、  Appium基础API
1、连接⼿机前置代码,缺⼀不可
from appium import webdriver
desired_caps = {}
desired_caps[‘platformName’] =‘Android’# 系统
desired_caps[‘platformVersion’] =‘5.1’# 系统版本号
desired_caps[‘deviceName’] =‘8681-M02-0x14074b65’ # ⼿机UDID
desired_caps[‘appPackage’] =‘com.android.settings’# 应⽤包名、启动名
desired_caps[‘appActivity’] =‘.Settings’
解决中⽂不能输⼊问
desired_caps[‘unicodeKeyboard’] = True
desired_caps[‘resetKeyboard’] = True
明driver对象
driver = webdriver.Remote(‘localhost:4723/wd/hub’, desired_caps)
2、获取包名启动current_XXXXX
3、启动其他程序
driver.start_activity(’ s’,’.ui.ConversationList’)
4、置于后台              backround_app  (秒)
5、定位元素
⼜分为id、class、xpath
其中,  element获取到的是⼀个元素如果有相同的特征获取到的是第⼀个
其中, element获取到的是⼀个列表,如果想⽤其中的元素,需要通过下标的形式
ele = driver.find_element_by_id(‘miui:id/arrow_right’) id 定位
black_buttion = driver.find_element_by_xpath("//*[contains(@text,‘canshuID’)]") xpath含糊定位

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。