-
Appium测试react-native前端技术实现的移动应用
2017-07-29 20:40:34
当听到前端是用react-native技术实现的andriod应用时,原以为这个是类似于H5实现的webview样式,可以通过chrome的inspect查看代码。后来,让开发代开了webview的debug开关,开关打开之后,应用页面无法加载出来,看到的是空白页面。后经对react-native技术的了解,发现其实这还是原生应用,因此无需打开webview的debug开关,也无需使用chrome的inspect,指需要使用uiautomator.bat工具即可定位元素。下面简单介绍下react-native技术,react-native技术Facebook也在用,它是能够在javascript和React的基础上获得完全一致的开发体验,构建世界一流的原生APP,可见其还是原生APP.它有着卓越的开发效率,学习一次,编写任何平台。听这挺不错。不过这种技术,通常元素没有id和name属性,这对于做自动化测试的打击面还是非常大的。我们在用Appium进行自动化脚本编写时,也的确发现元素大部分没有id和name属性,这种情况下只能通过xpath进行定位元素,同时为了保证脚本的稳定性和降低脚本的维护成本,我要求xpath全部写相对路径,绝对不写绝对路径。但是一个一个写xpath也是费时费力的事情,因此我们在tool中放了一个插件,可以自动生成元素的xpath,而且大部分是相对路径,还是非常不错的! -
adb命令汇总-持续更新中
2017-07-26 13:26:27
首先,需要对adb进行解释。什么是adb呢?Adb是Android debug bridge(Android调试桥)的缩写。adb是一个C/S架构的命令行工具,3部分构成:(1)、adb client端(运行在电脑上)tips:电脑上最好不要安装手机助手等软件,这样会占用adb的默认端口:5037(2)、adb server端(运行在电脑上)用于管理client和Andriod的adb后台进程(3)、adb后台进程(运行在手机上)主要是以下命令查看后台进程:adb shell ps|grep adbd其次, adb命令的分类:包括adb类、adb shell类和linux类。下面分别介绍----------------------------------------------------------(1)、adb类:命令格式 adb [-e|-d|-s<设备序列号>....] <子命令>可通过 adb help或者adb命令查看例如:C:\Users\USER>adbAndroid Debug Bridge version 1.0.31-a - directs adb to listen on all interfaces for a connection-d - directs command to the only connected USB devicereturns an error if more than one USB device is present.-e - directs command to the only running emulator.returns an error if more than one emulator is running.-s <specific device> - directs command to the device or emulator with the givenserial number or qualifier. Overrides ANDROID_SERIALenvironment variable.adb类常用命令包括:1、adb devices 获取设备的id2、adb get-state 获取设备的状态,结果包括device(正常)、offline(异常)、unkwon(无设备)3、adb kill-server(结束adb服务)、adb start-server(启动adb服务),通常组合使用4、adb logcat 查看andriod系统日志,可以通过>重定向到制定的路径下面5、adb bugreport ,输出内容非常多、可以打印dumpsys\dumpstate\logcat信息,建议也重定向导出6、adb install (-r) application.apk 安装(覆盖)应用7、adb uninstall application.apk 卸载应用8、adb pull sdcard/demo.doc D:/将sdcard中的demo.doc文件复制到D盘9、adb push D:/demo.doc sdcard/将d盘下面的demo.doc复制到sdcard中10、adb reboot 重启机器11、adb connect远程连接Andriod设备(通过wifi进行连接,需要在同一局域网内,通常需要root权限)adb connect ip------------------------------------------------------------(2)adb shell命令,待续 -
Monkey工具学习总结-原理篇
2017-07-25 13:34:55
Monkey工具的原理Monkey的启动文件在Android文件下面的/System/bin/monkey中。其主要的核心功能为调用monkey.jar文件,mankey.jar文件由多个类文件构成,其入口函数为com.andriod.commands.monkey.Monkey类。其代码构成包括:主控、监控、事件源和事件几个部分代码。源码获取地址:https://github.com/android/platform_development/tree/master/cmds/monkey其代码主要功能总结为:(1)、初始化事件源,创建事件队列;(2)、通过getNextEvent()方法循环获取事件。(3)、通过injectEvent方法调用WindowManager的方法讲事件注入系统中。 -
Monkey工具学习总结-使用篇
2017-07-24 16:55:04
1、Monkey定义:Monkey是google提供的一个命令行工具,可运行在模拟器或实际设备中,它向系统发送伪随机的用户事件,模拟用户的按键输入、触屏输入、手势输入等。从而对正在运行的应用程序进行压力测试,目的是看设备多长时间会出现异常,并观察系统的稳定性和容错性能。2、Monkey环境搭建Monkey是由adb命令来启动的,古只需要配置好adb环境即可。(1)、安装Andriod SDK和JDK(2)、将SDK下面的tools和platform-tools配置到环境变量中path中;(3)、cmd命令行输入adb,如果可以显示help信息,则配置成功。3、Monkey命令参数monkey [option] <count>---option可选,count必选option参数分类:(1)、基本配置参数,包括 --help,-v-v-v(二级)(2)、事件类型和频率参数-s<seed> 例如:adb shell monkey -s1111-v10--throttle <毫秒数> 事件之间插入固定延迟--pct-touch<百分比> 调整触摸事件的百分比--pct-motion<百分比> 调整动作事件的百分比--pct-pinchzoom<百分比>调整二指缩放事件的百分比--pct-trackball<百分比>调整轨迹事件的百分比--pct-rotation<百分比>调整屏幕旋转事件的百分比--pct-nav<百分比>调整基本导航事件的百分比--pct-majornav<百分比>调整主要导航事件<百分比>--pct-syskeys<百分比>调整系统按键事件的百分比--pct-appswitch<百分比>调整启动Activity的百分比--pct-flip<百分比>调整键盘事件的百分比--pct-anyevent<百分比>调整其他类型事件的百分比(3)、约束限制类参数-p<包名>-c<类别名>(4)、调试类参数--dbg-no-events--hprof 生成内存快照--ignore-crashes 崩溃发送事件--ignore-timeouts 忽略超时--ignore-security-exceptions 忽略安全异常--kill-process-after-error--monitor-native-crashes--wait-dbg(5)、官方隐藏类参数--pkg-blacklist-file<黑名单文件>--pkg-whitelist-file<白名单文件>-f<脚本文件>4、Monkey事件1、触摸事件:Sending Touch (Action_DOWN):Sending Touch (Action_UP)2、手势事件:sending Touch (Action_DOWN):Sending Touch (Action_MOVE):Sending Touch (Action_UP)3、二指缩放事件4、轨迹事件5、屏幕旋转事件6、基本导航事件7、主要导航事件8、系统按键事件9、启动Activity事件10、键盘事件11、其他类型事件4、Monkey启动adb shell monkey [opition] <count>5、Monkey停止adb shell ps|grep monkeyadb shell kill pid6、Monkey测试方法(1)、常规的稳定性测试(2)、自定义的脚本稳定性测试(3)、结合辅助命令、获取更多的信息7、Monkey日志分析日志分析非常重要,可以定位问题和解决问题。首先需要知道如何保存日志:(1)、Monkey日志保存的3个方法:adb shell monkey [option] <count> >e:\monkeyLog.txt将日志保存到monkeyLog.txt文件中(2)、adb shell monkey [option] <count> /mnt/sdcard/monkeyLog.txt将日志保存到手机sdcard中(3)、Monkey [option] <count> 1>/sdcard/monkeyLog.txt 2>/sdcrad/errorLog.txt分别保存日志和错误日志,错误日志记录崩溃或应用程序无响应错误日志。其次,如何解析日志?,需要先明确日志的构成:测试命令信息、伪随机事件流信息、异常信息、Monkey执行结果信息。(1)、测试命令信息例如 :Monkey: seed=1501203071005 count=10,// Event percentages:// 11: 13.0%(2)、伪随机事件,主要包括上面提到的11大事件例如::Switch::Sending Touch (ACTION_DOWN): 0:(954.0,1300.0):Sending Touch (ACTION_UP): 0:(962.5436,1295.4299):Sending Trackball (ACTION_MOVE): 0:(-2.0,2.0)(3)、异常信息Crash:....(4)、执行结果信息,如果有失败则显示失败原因。Events injected: 10:Sending rotation degree=0, persist=false:Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0## Network stats: elapsed time=8211ms (0ms mobile, 0ms wifi, 8211ms not connected)// Monkey finished再者,可以把自己关心的日志信息,用bat脚本提取出来并收集到一个日志中。 -
Appium python自动化测试环境搭建记录
2017-07-20 11:07:06
Python windows下安装步骤:
首先:
安装JDK和JRE并加入环境变量:
JDK环境变量配置:
1.系统变量→新建 JAVA_HOME 变量 C:\Java\jdk1.7.0_67 (假设JDK安装至此位置)
2.path后增加:;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
3.系统变量→新建 CLASSPATH 变量 .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
4.检验是否配置成功 运行cmd 输入 java -version第一步:
去官网:https://www.python.org/,下载并安装 python 的开发环境包,选择需要安装路径进行安装,笔者下载的是目前最新的
python3.5.2版本,安装目录为:C:\Python35,注意,安装过程中请勾选“加入环境变量”第二步:
添加 python 的环境变量,桌面“我的电脑”
右键菜单-->属性-->高级-->环境变量-->系统变量中的 Path 为:
变量名:PATH
变量值:;C:\Python35;C:\Python35\Scripts;第三步:
安装easysetup & pip,现在3.5.X版本不需要单独安装 easysetup & pip了,PIP是类似于linux的rpm的安装命令,会自
动去官网搜索可用的安装包,如果国内网络太慢,则请在安装时指定国内代理域名,安装时增加代理域名参数即可:
pip install -i --trusted-host http://pypi.douban.com/simple/ XXXX(要安装的包名称)第四步:
安装 selenium,如果是电脑处于联网状态的话,可以直接在 DOS环境下输入
命令安装:
pip install selenium
如果没联网,可以通过下载安装:
selenium 下载地址: https://pypi.python.org/pypi/selenium
下载 selenium 2.33.0 (目前的最新版本) ,并解压把整个目录放到 C:\Python35\Lib\site-packages
目录下。第五步:
安装Pycurl :pip install pycurlpython setup.py install --record pathXX.txt 记录安装后文件的路径
cat pathXX.txt | xargs rm -rf 删除这些文件python setup.py install --record pathChardet.txt
python setup.py install --record pathRequests.txt
python setup.py install --record pathSimplejson.txt
python setup.py install --record pathXlrd.txt
python setup.py install --record pathXlutils.txt
python setup.py install --record pathXlwt.txt第六步:
安装如下包:
xlrd(读取Excel) : pip install xlrd (以下包安装命令以此类推)
xlwt
ParamUnittest
configparser
Appium-Python-Client
chardet
requests
uiautomator
urllib3
xlutils支持Oracle数据库连接安装包请移步至同级文档:“APP自动化测试相关安装包”下载安装。
-
Robot framework自动化测试环境以及web\app\客户端\数据库\接口自动化环境搭建
2017-07-20 09:44:15
1安装python相关
1.1安装python(2.X版本不要安装3.X版本)
python-2.7.9.msi(一切的基础,切记安装的路径不要有中文不要有空格,http://www.python.org/download/releases/2.7.9/),默认的安装python时,会自动安装setuptools和pip,如果没有安装则参考步骤1.3和1.4进行安装。
验证方法:
1、按照1.2配置完环境变量之后在cmd下面输入pip –version,如果显示
pip 8.1.2 from c:\python27\lib\site-packages (python 2.7),则说明pip安装成功。
2、或者在C:\Python27\Lib\site-packages下面查看是否有pip和 setuptools文件夹,如果有则说明已经安装。
1.2环境变量配置
1.首先需要在系统中注册python环境变量:假设python的安装路径为c:\python27,则修改我的电脑->属性->高级->环境变量->系统变量中的PATH为: c:\python27(在原有PATH里添加python.exe所在目录)
2.此时,还是只能通过"python *.py"运行python脚本,若希望直接运行*.py,只需再修改另一个环境变量PATHEXT: .PY;.PYM
3. 在PATH里添加c:\python27\Scripts
如下图所示:
1.3安装setuptools
setuptools (用于后续的一些测试库的安装支持,https://pypi.python.org/pypi/setuptools/)
下载zip或者gz的压缩包,解压
假设setuptools解压后的目录在D:\ setuptools-14.3\setuptools-14.3(setup在该目录)
打开cmd命令行
cd D:\setuptools-14.3\setuptools-14.3
python setup.py install
后续其他python也可使用此方法下载后安装。
ps:若在安装过程中遇到:
ctype = ctype.encode(default_encoding) # omit in 3.x!
UnicodeDecodeError: 'ascii' codec can't decode byte 0xb0 in position 1: ordinal not in range(128)
解决方法:将mimetypes.py替换Lib目录下面的这个文件,然后删除对应的pyc文件
1.4安装pip
pip-install (pip安装方式,适合网络通畅的童鞋,https://github.com/pypa/pip/releases)
同setuptools的安装方法
安装完成后,其他库可用pip安装方式安装:
Example:打开cmd行
Pip install 库名
2安装robot framework
2.1安装wxpython(安装版本2.8.12.1的)
wxPython2.8-win32-unicode-2.8.12.1-py27.exe(wxPython,RIDE需要他的支持,http://sourceforge.net/projects/wxpython/files/wxPython/2.8.12.1/ )
2.2安装robot framework
robotframework-2.8.7(
http://code.google.com/p/robotframework/downloads/list)
或者命令:pip install robotframework-ride,这种安装的好处是会自动找到依赖的文件进行一块安装。
验证方法:1、 cmd下面输入ride.py如果启用了,就说明安装成功。
2.3安装ride(目前可用版本应该到1.50了)
robotframework-ride-1.3.0.win32.exe(robotFramework的IDE,目前最新1.3.0,http://code.google.com/p/robotframework-ride/downloads/list,如有中文乱码问题请参考:http://blog.csdn.net/tulituqi/article/details/7931069)
------------------------------------------------------------
3 web ui自动化相关(Selenium2Librabry)
pip install robotframework-selenium2library
3.1安装decorator
decorator-3.4.0(S2L库的依赖库。https://pypi.python.org/pypi/decorator/3.4.0)
3.2安装docutils
docutils-0.11(S2L库的依赖库。https://pypi.python.org/pypi/docutils/0.11)
3.3安装selenium
selenium-2.35.0(是selenium的原生python库,要到python官网下载https://pypi.python.org/pypi/selenium/2.35.0,而IEDriver.exe要到GOOGLE下载http://code.google.com/p/selenium/)
3.4安装selenium2library
robotframework-selenium2library (selenium2测试库,基于webdriver驱动,最新release是1.5.0,下载:https://github.com/rtomac/robotframework-selenium2library/releases,如有问题请参考:http://blog.csdn.net/tulituqi/article/details/7604967 )
-----------------------------------------------------------------------------------------------------------------
查看(1032) 评论(0) 收藏 分享 管理
Robot framework自动化框架内置库(BuildIn)关键字大全
2017-07-20 09:38:06
BuiltIn
版本:2.6.3
范围:global
命名参数:支持
介绍
BuiltIn是Robot Framework标准库,提供了常用关键字。它自动导入,从而始终可用。 提供的关键字有用于验证的(e.g. Should Be Equal, Should Contain),转换的(e.g. Convert To Integer),其他(e.g. Log, Sleep, Run Keyword If, Set Global Variable)。
所有关键字如下:
Call Method · Catenate · Comment · Convert To Binary · Convert To Boolean · Convert To Hex · Convert To Integer · Convert To Number · Convert To Octal · Convert To String · Create List · Evaluate · Exit For Loop · Fail · Fatal Error · Get Count · Get Length · Get Library Instance · Get Time · Get Variable Value · Get Variables · Import Library · Import Resource · Import Variables · Keyword Should Exist · Length Should Be · Log · Log Many · Log Variables · No Operation · Regexp Escape · Remove Tags · Repeat Keyword · Replace Variables · Run Keyword · Run Keyword And Continue On Failure · Run Keyword And Expect Error · Run Keyword And Ignore Error · Run Keyword If · Run Keyword If All Critical Tests Passed · Run Keyword If All Tests Passed · Run Keyword If Any Critical Tests Failed · Run Keyword If Any Tests Failed · Run Keyword If Test Failed · Run Keyword If Test Passed · Run Keyword If Timeout Occurred · Run Keyword Unless · Run Keywords · Set Global Variable · Set Library Search Order · Set Log Level · Set Suite Variable · Set Tags · Set Test Message · Set Test Variable · Set Variable · Set Variable If · Should Be Empty · Should Be Equal · Should Be Equal As Integers · Should Be Equal As Numbers · Should Be Equal As Strings · Should Be True · Should Contain · Should Contain X Times · Should End With · Should Match · Should Match Regexp · Should Not Be Empty · Should Not Be Equal · Should Not Be Equal As Integers · Should Not Be Equal As Numbers · Should Not Be Equal As Strings · Should Not Be True · Should Not Contain · Should Not End With · Should Not Match · Should Not Match Regexp · Should Not Start With · Should Start With · Sleep · Variable Should Exist · Variable Should Not Exist · Wait Until Keyword Succeeds
关键字介绍关键字
参数
文档
object, method_name, *args
使用参数args调用对象object的方法method_name。
方法可能返回值可以赋值给一个变量。
当找不到方法或者方法产生异常时,Keyword会失败。
例子:
Call Method
${hashtable}
put
myname
myvalue
${isempty} =
Call Method
${hashtable}
isEmpty
Should Not Be True
${isempty}
${value} =
Call Method
${hashtable}
get
myname
Should Be Equal
${value}
myvalue
Catenate
连接给定参数,返回字符串。
默认用空格连接参数项目,如果第一个参数为'SEPARATOR=<sep>',则使用”sep”来连接.
例子:
${str1} =
Catenate
Hello
world
${str2} =
Catenate
SEPARATOR=---
Hello
world
${str3} =
Catenate
SEPARATOR=
Hello
world
实际结果:
=>
- ${str1} = 'Hello world'
- ${str2} = 'Hello---world'
- ${str3} = 'Helloworld'
*messages
在日志文件中以关键字参数形式显示指定信息。
Comment对参数不进行任何处理,仅仅是显示在日志中,用于显示简单信息。
item, base=None, prefix=None, length=None
转换参数为二进制字符串。
如果添加了base参数,则先内部使用Convert To Integer转换为整数,然后再转换为二进制数字,以字符串的形式显示,比如”1011“。
返回值可以包含可选的前缀和最小长度(不包含前缀和负号等)。如果返回值比要求的长度短,则使用0填充。
例子:
${result} =
Convert To Binary
10
# Result is 1010
${result} =
Convert To Binary
F
base=16
prefix=0b
# Result is 0b1111
${result} =
Convert To Binary
-2
prefix=B
length=4
# Result is -B0010
item
转换参数为布尔值true或false。
如果参数是字符串'True'(不区分大小写)就返回真,为'False'就返回假;其他情况调用Python的'bool'的方法来判断。请参阅http://docs.python.org/lib/truth.html 。
item, base=None, prefix=None, length=None, lowercase=False
转换参数为十六进制字符串。
如果添加了base参数,则先内部使用Convert To Integer转换为整数,然后再转换为十六进制数字,以字符串的形式显示,比如'FF0A'。
返回值可以包含可选的前缀和最小长度(不包含前缀和负号等)。如果返回值比要求的长度短,则使用0填充。
默认返回大写字符串,lowercase参数会转换值为小写(不包含前缀)。
例子:
${result} =
Convert To Hex
255
# Result is FF
${result} =
Convert To Hex
-10
prefix=0x
length=2
# Result is -0x0A
${result} =
Convert To Hex
255
prefix=X
lowercase=yes
# Result is Xff
item, base=None
转换参数为整数。
如果参数是字符串,则默认转为十进制整数。使用其他进制可以用base指定或者添加前缀,比如0b表示2进制,0o
Robot framework app自动化测试常见问题总结
2017-07-18 14:22:45
1、抓取ACTIVITY的简便方法
首先连接手机 打开待测的APP 然后在PC上打开CMD 输入adb shell dumpsys activity |find "mFocusedActivity"
可以直接定位到activity2、如何保证APP和WEB都可以使用(app的谷歌浏览器需要INSPECT,WEB需要运行脚本)
使用55版本的Chrome,关于谷歌 inspect的空白页问题 已解决
在HOST文件中加入映射
61.91.161.217 chrome-devtools-frontend.appspot.com
61.91.161.217 chrometophone.appspot.com
谷歌浏览器 55版本 安卓手机 6.0.1已可以使用3、个别手机每次跑自动化时需要安装unlock 和 appium setting 如何禁用?禁掉Appium中安装Unlock, Setting, Android Input Manager
方法很简单,按照如下方法修改2个文件:
第一个文件:android-helpers.js
位置: /Applications/Appium.app/Contents/Resources/node_modules/appium/node_modules/appium-android-driver/lib
改动点:4、如果没有Andriod手机,如何开展自动化测试?
解决:安装“天天模拟器”,安装本地apk应用即可测试,方便快捷,如果遇到需要测试toast提示信息的,模拟器支持有点问题,建议让开发统一改成一种提示信息类型;
5、如何保证模拟器测试通过就代表在真机上测试通过?
解决:1、跟开发确认是否认同模拟器和真机一致,识别出模拟器和真机不同的功能点,专门用真机执行;2、在模拟器调通代码后,在真机上跑一遍,看是否有问题,如果没有问题则说明模拟器可以代表真机,后续则可以在模拟器上进行版本回归测试;
6、用模拟器的好处是什么?
解决:可以选择不同的Andriod版本,模拟不同的机型进行测试,不需要真机,最重要的就是不需要花钱;
7、编写脚本时,如何保证脚本的稳定性和健壮性,减少后续的维护成本?
解决:locator用相对路径而坚决不用绝对路径,谨记!
8、Press keycode方法,对应的code值有那些?
参考:https://testerhome.com/topics/799
9、(Andriod)在编写测试用例时,需要经常进行调试脚本运行情况,但每次执行都需要重新安装登录,非常繁琐和耗时
解决方法:在执行一次安装登录操作后,停止Appium程序,点击Android Settings ,选中“No Reset”,重新启动Appium。再次执行用例时就不会重新安装登录了。
10、(Andriod)执行脚本,跑完几次之后,总是遇到“ WebDriverException: Message: A new session could not be created. ”,怎么解决?
答:Appium is probably shut down or something like there is already a session。so you have to start it again start it from the terminal or command prompt using the command
appium.
you can use command appium-doctor for detail reason.
11、输入信息时,总会弹出手机自带键盘
解决方法:将手机默认键盘选择为appium android input manager for unicode
12、划屏无反应
解决方法:driver.swipe(windht*6/7,heigh/2,widht/7,height/2,2);
第一步,了解手机分辨率,例如:1080*1980
第二步,将1080设置成X轴,1980设置为Y轴,计算出预计想滑动尺寸
13、文本输入框不允许输入中文,如何解决?
答:需要修改一下AppiumLibrary 的这个文件:
F:\Python27\Lib\site-packages\AppiumLibrary\keywords_applicationmanagement.py
加入两行代码就可以了。
desired_caps["unicodeKeyboard"] = "True"
desired_caps["resetKeyboard"] = "True"
这个时候跑case 的时候,appium 会把测试手机的输入法设置成Appium 的输入法。这个输入法不能弹出键盘,如果需要正常输入,就需要切换回系统的输入法。或者你自己安装的输入法。
14、输入密码之后,密码键盘没有隐藏,遮挡下面的按键,导致无法点击下面的按钮,如何解决?
答:输入密码之后,在点击按钮之前,增加go back关键字----我封装的“页面回退”关键字。
15、appium自动化测试中如何获取toast消息?
答: 1、需要安装Appium 1.6.3版本;(首先安装node.js V6.11.0版本,之后通过命令行:npm install -g appium@1.6.3进行安装)
2、脚本设计中使用desired_caps['automationName']='uiautomator2';
3、封装关键字Find_Toast,里面的代码内容如下:
message='密码输入不一致,请重新输入'
message1='//*[@text=\'{}\']'.format(message)
element=WebDriverWait(driver,10,poll_frequency=0.5).until(expected_conditions.presence_of_element_located((By.XPATH,message1)))
16、在WebView模式下,capture screenshot关键字不可用,如何解决?
答: 如果要截图,先切回到Native模式,在进行截图。
17、在WebView模式下,swipe关键字不可用,如何解决?
答: 如果要滑动,先切回到Native模式,滑动完之后在切换到webview模式。
Robot framework web自动化测试环境搭建常见问题和解决方法
2017-07-18 14:16:47
Q1:RF安装完成之后,导入Selenium2Library后使用open browser关键字无法启动浏览器,或者浏览器启动之后无法输入URL地址。
答:这类问题通常是由于driver跟浏览器版本不兼容引起的,需要升级driver版本同时需要降低浏览器版本。目前IEDriverServer最新版本是3.0,chromedriver版本是2.19;
火狐浏览器43.0.1版本是没有问题的,chrome浏览器47.0版本是没有问题的;Q2:RF使用火狐浏览器启动时报'geckodriver' executable needs to be in PATH错误,如何解决?
答:这个是因为selenium版本为3.0的原因,需要将Selenium的版本降低为3.0以下版本。解决方法:首先用命令pip show selenium看下selenium版本,如果是3.0以上版本则删除C:\Python27\Lib\site-packages目录下面的selenium和selenium-3....文件夹,然后在cmd下面执行pip install selenium==2.53.6,安装完重启下RF即可解决。Q3:安装AutoIT之后导入AutoItLibrary库为红色,无法导入成功?
答:首先,需要看下安装的版本,64bit操作系统,需要用AutoItLibrary-1.1_x64这个文件;同时需要安装AutoIt-V3应用;
其次,安装AutoItLibrary时,需要以管理员身份安装,以管理员身份运行cmd,cd到AutoItLibrary-1.1_x64目录下面,运行python setup.py install命令进行安装;通常到这步重启RF之后,AutoItLibrary即可导入成功。如果还没有成功,继续下面的步骤。
再次,利用cmd进入AutoItX3.dll文件所在路径,运行系统注销和系统注册命令:
c:\Python27\Lib\site-packages\AutoItLibrary\lib>regsvr32 /u AutoItX3.dll
c:\Python27\Lib\site-packages\AutoItLibrary\lib>regsvr32 /s AutoItX3.dllQ4:AutoItLibrary库都有哪些关键字?如何使用?
答:可以查看这个网页:http://www.cnblogs.com/tinghai8/p/5839050.htmlQ5:安装DatabaseLibrary之后,库导入后为红色,无法导入成功?报"ImportError:DLL load failed....."
答:检查按装步骤
1、 安装cx_Oracle(64位);
2、 将oracle instant client-11-64位的文件路径放到环境变量中,并将oracle instant client文件下面的oci.dll、oraocci11.dll、oraociei11.dll复制到site-package下面;
3、 Pip install robotframework-databaselibrary;Q6:RF使用IE执行应用时报“IEdriverserver not in PATH”错误
答:python27下面没有IEDriverServer.exe文件Q7:RF安装之后pip版本较低,用pip安装其他库时报错。
答:先用 python -m pip install --upgrade pip命名进行在线升级,之后在用pip安装其他库。Q8:setup和teardown中使用带参数的关键字如何处理,例如open browser关键字。
答:关键字和参数中间用|分割即可,例如open browser | http://www.baidu.com |gc放到setup中。Robot framework web自动化测试遇到的常见问题和解决方法汇总
2017-07-18 14:09:21
Q1:执行脚本时报“Element can not be clickable on point(25,100)”?
答:这个原因是元素被遮挡,无法看到,需要滚动滑动条使元素可见,即可操作。对于页面主体部分滑动可以使用javascript命令:javascript.:window.scrollBy(250,1300);对于左导航栏部分滑动可以使用javascript命令:jquery=$(".滑动条class").offset( {top:-400,left:0})Q2:excel数据文件编辑后保存报共享冲突是什么原因?
答:是由于RF真正允许脚本占用了excel进程导致,手工杀死pythonw.exe进程即可解决;Q3:执行脚本时报“local variable 'cellValue' referenced before assignment”,怎么解决?
答:这个是因为excelLibrary关键字缺少了参数引起的,目前比较多的是“获取表单单个值”关键字缺少了&{ii}参数。还有就是用例中参数传的单元格值不正确,例如本来B2有值,传的是B3单元格(空);Q4:脚本执行未通过,经排查locator(id,name,xpath)都没有问题,但执行时就是无法操作上对象?
答:原因一:页面中是否存在iframe;如果有iframe需要先用Select Frame关键字,如果切换了页面,页面iframe不同时,需要unselect frame然后在选择新的iframe. 注意:unselect frame是跳出所有的iframe.
原因二:用locatord在页面上定位到了多个相同的对象,导致无法对期望的对象进行操作;例如id=bankName存在多个对象,需要明确操作的是那个对象,则用(//*[@id="bankName"])[x],x表示第下x+1个元素。
原因三:网络或者浏览器的原因,页面加载速度慢,页面还没有加载完,就执行操作导致无法操作成功,此时需要增加一个wait until page contain (element)等相关关键字或者wait until element is visible,保证元素加载完在操作。
备注:不要用sleep关键字,因为sleep关键字不能智能判断页面时间,脚本失败率非常高。
Q4:脚本执行后报“element is not clickable”?
答:这说明元素是不可以点击的元素,例如div元素,则需要用其他操作。Q5:脚本执行后报“element is not visible”?
答:这个是因为元素被隐藏了、不可见。元素display属性为none。可以通过javascript先将元素设置为可见:document.getElementById("id").style.display="block"Q6:执行查询语句在数据库中查询的结果含有中文时,显示的为乱码。
答:这个是因为数据库默认编码方式不是utf-8,需要进行代码转换,可以导入TestLibrary库,使用decode关键字进行解决。Q7:测试用例是否可以设置多个Tag值?
答:可以Q8:运行时, Run页面中only run tests with these tage或者skip tests with these tags下面是否可以输入多个tag?
答:可以,中间用“;”分割Q9:执行脚本时,用get Text关键字获取元素值不是期望的值。例如 get text |xpath=/html/body/div,明明是“ABC”,获取的却是“BCD”
答:需要查看页面是否是新打开的窗口,还是在原来的窗口,如果是新打开的窗口,需要用 select window | URL选择到新的窗口中。Q10:对于密码输入框通过安全控件实现的,脚本无法输入密码,即使可以输入密码,系统判断为没有输入,如何解决?
答:这种问题技术解决有难度,最简单的方法是让开发把密码安全控件去掉,改成普通的密码输入框;
Q11:对于登录时或者脚本执行过程中,需要输入动态验证码的怎么操作?
答:动态验证码的需要使用图像技术解决,技术上是可以解决的,但是成本太高,最简单的方法是让开发将验证码改成通用验证码,例如000000.
Q12:有时通过inputtext或者select的方式无法给控件负值成功,如何通过javascript给控件负值?
答:执行这条javascript:window.document.getEltementById('Startime').value='2016-11-12'
Q13:问题:如何处理数据库中长度不够?
答: 对于数据库的取值,一些FLOAT类型的数据,小数点后2位如果都为0,取出来可能只有小数点后1位,可以对取出的数据进行处理,先验证是否缺失,如果缺失补一位再return,如果不缺失则正常return
Q14:左导航栏下面的菜单遮挡,看不到需要滑动一下,怎么处理?
答:可以使用FOCUS定位元素再选取,对于一些个别的情况可能无法适用。
Q15:怎么验证查询结果按照时间倒序排列?
答:可以使用sql语句倒序排列,跟页面的结果进行比对
Q16:脚本执行时报如下错误UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-78: ordinal not in range(128),或者中文字符显示为???,如何解决?
答:首先需要判断这个错误是python的引起的还是数据库操作过程中报出的,如果是python引起的,解决办法如下:
python27默认编码格式为ascii
1、查看python默认编码格式
import sys print sys.getdefaultencoding() 2、修改默认编码格式为utf-8且只在本次生效
import sys
reload(sys) sys.setdefaultencoding('utf-8')
3、永久生效
在python27下面的site-package文件下面创建sitecustomize.py文件,将 步骤2中的内容拷贝进去,保存即可。
如果是数据库操作过程报的错,则解决办法如下:
1、将instantclient_11_2-64文件放到C盘下面;
2、然后配置如下环境变量:
- ORACLE_HOME = C:\instantclient_11_2
- TNS_ADMIN = C:\instantclient_11_2
- NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK
4.Path变量,在后面添加 C:\instantclient_11_2
Q17:元素含有readonly属性,导致元素不可操作,如果要操作该如何处理?
答:用js,$("aa").removeAttr("readOnly");document.getElementById(id).removeAttribute("readonly");
Q18:类似OBM,checkbox开关和radio无法勾选,执行脚本时报对象is not visible,如何解决?
通过JS,脚本为:Execute javascript $("input[id='nosingleLimit_kuaijie']").click()
Q19:左道航栏如果被遮挡,无法点击菜单,如何处理?
通过JS:$("span:contains(通道管理)").mouseover();$("a:contains(机构管理)").click();
Q20:上传文件部分脚本执行时,过程中不报错,但用之前的方法上传上的文件不能回显(个别电脑,销售系统进件流程)
解决办法:将上传文件 部分的脚本用另一种方式实现
Wait For Active Window 打开
Control Set Text 打开 \ Edit1 ${file}
sleep 2
Control Click \ \ Button1
sleep 2sQ21:Robot framework如何对AJAX应用进行自动化实现?
1、首先进入到iframe中; 2、获取输入窗体<body>元素;3、按Tab; 4、输入内容,具体实现步骤:
Select Frame. id=ueditor_0
Press Key |xpath=/html/body | \\9
Input Text | xpath=/html/body |${客服真推消息内容1}
我的栏目
标题搜索
我的存档
数据统计
- 访问量: 333533
- 日志数: 230
- 建立时间: 2007-11-19
- 更新时间: 2024-04-03