RF遇到的一些常见问题处理记录

1、  常用库

Builtin   RF内部库,常用的should xxx  wait xxx  log xxx   run keyword if  xxxx等 都在这个库里面

String   字符串处理、文本处理

Conllections    字典、列表处理

Selenium2library    web自动化测试基础库

AutoItLibrary    鼠标 键盘操作 C/S控件操作

 

2、  数据库获取存在乱码怎么处理?数据库取值中文转码

处理前

 

处理后

 

方法:conect参数中增加charset='utf8'

 

3、  浏览器怎么打不开?

检查chromedriver路径是否添加至环境变量

检查open browser 后是否添加了浏览器类型且是否写对

检查日志中是否存在浏览器版本信息,是否需要升级驱动或者浏览器版本降级

 

4、  导入库是红色的

  1. 确定是否是pip在线安装,其他下载文件可能因为网络原因没安装到位,那么再安装一次
  2. Pip list检查是否安装成功,检查存在库,则pip升级一次,之后重启ride

5、  下拉框处理

HTML里面 下拉框开头是<option xxx>

如下结构,可以使用select from list xpath=// 

                   Select from list by value xxx

 

<html>

 

<body>

 

<form>

<select name="cars">

<option value="volvo">Volvo</option>

<option value="saab">Saab</option>

<option value="fiat">Fiat</option>

<option value="audi">Audi</option>

</select>

</form>

 

</body>

</html>

 

 

如果打开是<div xxxx>

就用常规click element xpath  点开下拉按钮

         Click element xpath =  选中下拉框中元素

 

6、  多选按钮

考虑Select checkbox(让你的脚本看起来漂亮点)

或者传统的click element

 

7、  带img的html

Click image  id  src alt三个属性

Cilck element xpath=(//img[contains(@src,'data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==')])[X])

或者

Click element css=xxxxx

8、  for循环

场景---数据库取得一组数据,查看数据中是否存在目标值,但不知道具体位置

 

:For    ${vaule}    IN RANGE    ${result}

Log    ${vaule}    #查看列表数据清单

一般处理方式是转化成str类型

${result}    Evaulate    Str(${result})

Should contain    ${result}     ${vaule}    判断${result}是否包含${vaule}

 

9、  用例前很多动作重复用到怎么办?

用例面板存在setup/teardown

见例子

   

用例内容为打印’3’ 但是此前先执行打印’1’ ‘2’ 打印完’3’ 结尾再打印’4’ ‘5’

 

同时注意图中格式,可以存放多个关键字 但是关键字之动作之间需要加上大写’AND’ 并使用’|’隔开

10、          IF语句

单一条件

Run keyword if    ${x} <= 3    log    ‘right’    ElSE    log    ‘erro’

 

多个条件

Run keyword if    ‘${x}’ == 1 or ‘${y}’ == 2 or ‘${z}’ == 3    log   ‘right’

 

多重条件

Run keyword if    ${x} <= 3    log    ‘right’   

…    Else if    ${y} > 4    log   ‘erro’

…    Else    log    ‘完了’

 

另外查看 run keyword if 关键字时还注意到

 

 

存在关键字 run keyword unless

刚好和其上介绍的run keyword if相反 用法相同,有兴趣可以试试(* ̄︶ ̄)

 

11、          写了if语句 怎么让其执行多行关键字

这个看你封装的 run keyword if  x=x 语句

语句只能是一个关键字

但是一个关键字可以封装包含多个关键字,根据你的需求来

 

12、            怎么修改日志路径

在ride运行界面,Arguments输入-l 日志路径 –r 日志路径

-I  log的路径参数

-r  报告的路径参数

 

 

 

 

13、            ride提示元素找不到

遇到这种问题不要着急,慢慢来,从以下几个方面寻找

  1. 是不是页面切换,页面还没加载出来,代码已经执行了,所以提示找不到元素

这里建议sleep 或者wait命令

  1. Chrome中copy xpath复制出来的是相对路径,所以id会变,确认取元素页面是否是初次打开的页面
  2. 页面布局原因存在多个frame,先前定位的元素在另外一个frame如图

 

首先使用select frame   但是这里存在局限 很多frame不存在id 和 name属性  无法定位,需要修改select_frame方法

def select_frame(self, locator, index):

    """Sets frame identified by `locator` as current frame if 'locator' is not unique, use index

     

    Key attributes for frames are `id` and `name.` See `introduction` for details about locating elements.

    """

    if locator.startswith("tag") :

        elements = self._element_find(locator, False, True)

        element = elements[int(index)]

    else:

        element = self._element_find(locator, True, True)

    self._current_browser().switch_to_frame(element)

 

修改后使用方法为

select frame    tag=iframe   1

 

 

另外还有页面模糊匹配的方法,这里用的不熟,后面详解一下。

xpath = //div[text()='web上显示的文本']  根据文本匹配

还有一文本前后可能有空格,特殊字符,可以用部分文本来匹配

xpath = //div[contains(text(),'部分文本')]

 

还有父节点取法,xpath回炉重学,最近看一遍xpath觉得变文盲了

如下,列表存在一条杨思剑的信息

 

 

HTML如图

 

如果唯一,用文本定位方式,xpath=//div[text()='杨思剑']

 

14.判断元素是否置灰

Js里面使一个按钮置灰的方法时disable(),对应html中表现在class属性里有个disable或者其他说明鬼 

我们的后台是酱紫的

 

所以我们只需要获取这个空间的class属性中是否包含这些

相关关键字

get element attribute 获取元素属性

 

${class_value}  Get Element Attribute xpath=//div[@id=’ext-gen2166’]@class

之后判断${class_value}  中是否包含unselectable即可

 

14、            弹窗处理

Dismiss Alert

Choose ok on next confirmation

Confirm action

如果不行~ 用click element吧~

 

补充—获取弹窗信息

Get alert message

 

15、            数据库取值

理解二维概念

数据库第一个值就是0行0列

数据库取值需要处理, ${a[0][0]}

我们的数据库存在特殊形式~如图

 

导出来是一组字符串,此方法取出来 可以type一下,得到的结果是dic 则按字典来取值

${chargeDWOption}       evaluate  str(${chargeDWOption[0][0]})

${inThreshold}         evaluate  ${chargeDWOption}["inThreshold"]    #入金手续费起征点

 

 

16. 处理页面出现不定提示框的情况方法:

 run keyword and return status + wait until page contains element

 

${status}    run keyword and return status    wait until page contains element  xxx

 

如果界面出现xxx   则${status}为True 注意大写

此时可以补充一个循环来继续下一步操作

 

16、            跳转页签使用方法

例如页面存在多个页签

Click element 可以处理

也可以使用focus ****的方法

 

17、            键盘输入

press key  xpath  (内容或功能键)    (selenium2Library库) 建议使用

send                      (AutoItlibrary库)   相当强大,但是我们不怎么用

 

补充 其他输入可以用 input text xpath (内容)

 

18、            Js脚本执行

Execute javascript    document.getElementById("一个属性").value=${属性} #定位

还是需要了解一些js的语法

 

19、            AutoItlibrary库常用关键字

AutoitLibrary常用关键字

 

run: 运行可执行程序

wait for active window:等待窗口激活

win wait: 窗口等待

win close:关闭窗口

control get text:获取文本内容

control click:鼠标点击

send:输入内容信息

参数请见RF --->F5

 

20、            数据库连接

 

 

 

  1. connect参数一定要全,顺序可以打乱
  2. 执行时使用query
  3. 执行完不用,记得关闭连接
  4. 使用时记得取值的数据库是否正确
posted @ 2017-04-11 10:43  大雨田  阅读(1345)  评论(0)    收藏  举报