date:2018520 day09

一.学习环境

1.安装python27

2.安装robotframework(cmd→【pip install robotframework】)

3.安装WxPython(wxPython是python的一个GUI库,RIDE是基于wxPython开发)

python3.7版本下,安装wxpython   wxPython下载安装教程

4.安装robotframework-ride(cmd→【pip install  robotframework-ride】)(RIDE是一个用于创建、组织、运行测试的图形界面软件)

5.安装selenium2library(cmd→【pip install robotframework-selenium2library】)

 

二.如何打开

cmd→ride.Py

可能遇见的问题1:‘ride’不是内部或外部命令...

解决方法:在X:\Python27\Script路径下找到ride.py,以python.exe方式运行。如我的路径就是C:\Python27\Scripts\ride.py

打开后如下图:

 

三.Ride的使用

1.新建项目(File→New Project)(Type要选Directory)

2.新建测试套件(项目名→New Suite)

右边一栏可以导入Library、Resource

 

3.新建文件夹(项目名→New Directory)

4.新建测试资源(项目名→New Resource)

套件与测试资源区别:测试资源没有New Test Case,但是资源里面的Keyword、Scalar(变量)能被套件引用,测试套件里的关键字(函数)只有套件里的用例才能使用。

 

如何引用测试资源:在套件里右边有一栏,点击,在path里输入Keyword所在的资源名(带上'.txt');被引用的资源就会被点亮。

5.新建测试用例(套件名→New Test Case)

Setup:前置条件,要运行测试用例所要做的工作

Teardown:执行完测试用例后的操作

Tags:标签

Timeout:超时

 

Arguments:根据输入来保存测试报告,测试日志

-d:保存的路径   -r:报告保存的名字   -l:日志保存的名字  -o 输出文档

 

 

Only run tests with these tags是根据输入的标签来运行;Skip tests with these tags是跳过输入的标签来运行

 

6.新建关键字(函数,方法)(套件名→New User Keyword)

 

要给关键字(函数)传值,在Arguments里加入参数,多个参数用‘|’隔开;

 

如果关键字(函数)要有返回,在Return Value里加入返回,多个返回用‘|’隔开;

 

关键字(函数)里有Documentation,是用于描述关键字(函数)的。

 

 

关键字(函数)的方法体

 

 

调用关键字(函数):带上Keyword名即是调用(后面有两个红框,代表要传两个参数)

 

四.基础知识

1.变量

Way1:新建变量(项目名/套件名→New Scalar)

Way2:在用例中新建内部变量——set variable

Way3:在用例中新建套件变量——set suite variable(在同个套件中都能使用的变量。声明变量的用例和调用套件变量的用例要同时运行,且声明变量的用例要在调用套件变量的用例的上面)

Way4:在用例中新建全局变量——set global variable(在整个项目中都能使用的变量。声明变量的用例和调用全局变量的用例要同时运行,且声明变量的用例要在调用全局变量的用例的上面)

 

2.Evaluate

Evaluate是执行python表达式,并返回执行结果

 

随机数:

要导入random,在代码后面加导入库

 

开平方:

 

3.if语句——Run Keyword If

Run Keyword If为关键字不区分大写、小写;但是else if以及else必须大写;

‘...’表示链接上一层

 

 

与Run keyword if相反,有一个关键字Run keyword unless (当不满足条件时,执行后面的语句)

 

 

4.for语句——:FOR

for语句下面要空(缩进)一格,代表在for语句里面;

FOR、IN RANGE要大写

 

 

 遍历自定义列表:

create list——创建list;

遍历列表必须用@{};

用if语句证明相等,前后两个值是字符,都要用引号标出来;

 

创建字典:

Create Dictionary是内置keyword;

要使用Get From Dictionary(根据key,获得value)关键字,套件必须导入Collections

 

5.should be equal:关键字,判断是否相等

 

 6.run keyword and return status:关键字,运行关键字并返回状态

 

7.String库(remove string关键字):

首先在套件中导入Sting库,然后就可以使用String里的Remove string

 

8.Import Library(BuiltIn关键字):

Import Library 库名 的作用效果与Library 库名效果一样,但是Import Library后不能ctrl+shift+空格 查看库中的关键字。

 

 

 

五.Tips

1.快捷键ctrl+1=${}

2.快捷键ctrl+2=@{}

3.快捷键ctrl+3=注释

4.快捷键ctrl+4=取消注释

5.按F5键 Search Keywords

6.按F3键 Search Tests

7.库名.关键字=关键字

 

 自动变量链接:https://www.cnblogs.com/chengchengla1990/p/7056541.html

 RF新手常见问题:https://blog.csdn.net/yutianxu1986/article/details/77774954

 

六、实操

 1.较精准定位

 

2.关于Appium+RF的轴表达式

child:选取当前节点的所有子元素

parent:选取当前节点的直接父元素

descendant:选取当前节点的所有后代元素

ancestor:选取当前节点的所有先辈元素

preceding:选取当前节点之前的所有节点

preceding-sibling:当前节点之前的所有同级节点

following:选取当前节点之后的所有节点

following-sibling:当前节点之后的所有同级节点

 

3.    /. 与 /..

/.   :表示当前目录

/..  :表示上一级目录

 

 

 4. Unselect frame

其中已进入一个frame(非主frame),要想进入另一个frame时,必须使用关键字Unselect frame退回主frame才可进入另一个frame

 

5.contains 与 not contains

 

 6.Appium(简单点说,Selenium是web端的自动化,Appium是app端的自动化)

Appium是一个自动化测试开源工具,支持iOS和android平台上的移动原生应用、移动Web应用和混合应用。Appium是一个跨平台工具,它允许测试人员使用同样的接口、基于不同的平台写自动化测试代码,大大增加了测试套件间代码的复用性。
- 移动原生应用:是指那些用iOS或者android sdk写的应用;
- 移动web应用:是指那些使用移动浏览器访问的应用,appium支持iOS的safari和android上的chrome;
- 混合应用:是指原生代码封装在网页视图(原生代码和web内容交互)。
——以上来自https://blog.csdn.net/zytthappy/article/details/79686354

 

 7.Android system webview 与 chromedriver

appium通过chromedriver驱动webview,因此需要android system webview 与chromedriver版本相对应。

有关android webview与chromedriver更多知识:https://www.cnblogs.com/sao-fox/p/6396984.html

其中,WebView是一个用来显示Web网页的控件

 

8.RobotRemoteServer

robotremoteserver是一种远程库接口技术(remote library interface)。我们知道当我要使用的Robot Framework的库是被安装在..\Python27\Lib\site-packages\目录下面的。例如常用的Selenium2Library。但robotremoteserver就可以启动一个Library给Robot Framework用,不管这个库在本机的任何位置,或远程的某台主机上,或者这个库不是Python开发的。

——以上来自https://www.cnblogs.com/fnng/p/4960697.html

 

9.Get Element Attribute

 

10.List Variable

在@{list}被赋值而${list}没被赋值的情况下,系统会默认${f}是@{f}的Scalar形式。

在${list}被赋值而@{list}没被赋值的情况下,但它并不会默认@{f}是${f}的list形式。

List variable与 Scalar: https://blog.csdn.net/tulituqi/article/details/7907981

Append to list关键字: https://blog.csdn.net/tan10076/article/details/80433880

 

11.int() str() 及计算list长度

计算list长度