array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 Robot Framework学习笔记(十)------Selenium2Library库 - 爱码网

一、安装selenium2library库

如果已经安装了pip,则使用管理员模式打开windows命令行,输入pip install robotframework-selenium2library,安装完成后在命令行输入pip list查看python的安装列表,列表中出现了robotframework-selenium2library及对应的版本号,说明安装完成。

二、导入selenium2library库

添加完成,黑色示添加的库正常,红色表示库不存。如果为红色,请检查C:\Python27\Lib\site-packages 目录下是否有 Selenium2Library 目录

Robot Framework学习笔记(十)------Selenium2Library库

按F5可调出关键字查询窗口。source选择Selenium2Lilrary,然后输入关键字,点击搜索。选择关键字可以查看关键字的说明

Robot Framework学习笔记(十)------Selenium2Library库

三、第一个例子

比如打开百度,输入一个Open Browser关键字,如果关键字为蓝色说明它是一个合法的关键字,后面有一个方框是红色的,表示这个参数不能缺省的。通过说明信息中,我发现它需要一个 url 地址是必填的,当然还需要指定 browser (默认不填为 friefox)

Robot Framework学习笔记(十)------Selenium2Library库

四、元素定位

 Web 自动化测试其实就是找到元素(定位元素)并操作元素。

Selenium2Library 提供了非常丰富的定位器:

Robot Framework学习笔记(十)------Selenium2Library库

最常用的其实是id、name、xpath、css。 id 和 name两种定位方式非常简单且实用, xpath 和 css两种定位方式足够强大,可以满足几乎所有定位需求。

1、id和name定位

以百度为例。我们可看到输入框input元素有id和name属性,百度一下按钮有id属性。

Robot Framework学习笔记(十)------Selenium2Library库

Robot Framework学习笔记(十)------Selenium2Library库

输入框:id=kw  name=wd,在 Robot framework 中就是这样写的:

Robot Framework学习笔记(十)------Selenium2Library库

Input text 用于输入框的关键字 ,后面两个参数,一个是元素的定位,一个是输入框输入的值。

百度一下按钮:id=su,在 Robot framework 中就是这样写的:

Robot Framework学习笔记(十)------Selenium2Library库

click button用户点击按钮的关键字,后面跟着一个必填参数。

2、xpath定位

XPath 是一种在 XML 文档中定位元素的语言。因为 HTML 可以看做 XML 的一种实现,所以 selenium用户可是使用这种强大语言在 web 应用中定位元素。如果一个元素没有id和name或没有唯一标识可以使用xpath 通过层级关系找到元素。

(1)xpath绝对路径

比如百度页面的搜索输入框xpath=/html/body/div[2]/div[1]/div/div[1]/div/form/span[1]/input。绝对路径的用法往往是在我们迫不得已的时候才用的。大多时候用相对路径更简便

 (2)xpath的相对路径

使用元素本身定位:比如百度页面的搜索输入框xpath=//*[@],可以利用元素自身的属性。//表示某个层级下,*表示某个标签名。@id=kw表示这个元素有个 id 等于 kw

 当然,一般也可以制定标签名:xpath=//input[@]元素本身,可以利用的属性就不只局限为于 id 和 name ,如:Xpath = //input[@autocomplete=’off’],但要保证这些元素可以唯一的识别一个元素。

找上级:如果一个元素找不到可以先找到他的上级。比如:xpath = //span[@class='bg s_btn_wr’]/input,如果父级没有唯一标识,还可以继续往上找:

xpath = //form[@id=’form1’]/span/input

布尔值写法:

Xpath = //input[@id=’kw1’ and @name=’wd’]
Robot Framework学习笔记(十)------Selenium2Library库

总结:使用过程中发现xpath定位有时候语法并没有任何问题也定位不到元素,比如xpath = //span[@class='bg s_btn_wr’]/input。

3、css 定位

CSS(Cascading Style Sheets)是一种语言,它被用来描述 HTML 和 XML 文档的表现。CSS 使用选择器来为页面元素绑定属性。这些选择器可以被 selenium 用作另外的定位策略。CSS 可以比较灵活选择控件的任意属性,一般情况下定位速度要比 XPath 快。
CSS 选择器的常见语法:

Robot Framework学习笔记(十)------Selenium2Library库

Robot Framework学习笔记(十)------Selenium2Library库

五、Selenium2Library 常用关键字

1、浏览器驱动

Robot Framework学习笔记(十)------Selenium2Library库

Robot Framework学习笔记(十)------Selenium2Library库

open browser也可以打开本地的文件,比如:

Robot Framework学习笔记(十)------Selenium2Library库

2、关闭浏览器

(1)关闭当前页面

Robot Framework学习笔记(十)------Selenium2Library库

(2)关闭所有页面

Robot Framework学习笔记(十)------Selenium2Library库

3、浏览器最大化

Robot Framework学习笔记(十)------Selenium2Library库

4、设置浏览器窗口宽、高

Robot Framework学习笔记(十)------Selenium2Library库

5、获取浏览器窗口尺寸

Robot Framework学习笔记(十)------Selenium2Library库

6、文本输入

Robot Framework学习笔记(十)------Selenium2Library库

7、点击元素

Robot Framework学习笔记(十)------Selenium2Library库

8、等待元素出现

Arguments:[ locator | timeout=None | error=None ],Xpath=//* [@] :表示元素定位,这里定位出现的元素。42 : 表示最长等待时间。Error : 表示错误提示,自定义错误提示,如:“元素不能正常显示”

 Robot Framework学习笔记(十)------Selenium2Library库

9、获取 title

Returns title of current page.我们通常会将获取的 title 传递给一个变量,然后与预期结果进行比较。从而判断当前脚本执行成功

Robot Framework学习笔记(十)------Selenium2Library库

 10、获取元素的text

Arguments:[ locator ],Returns the text value of element identified by `locator`.

 Robot Framework学习笔记(十)------Selenium2Library库

11、获取元素的属性值

id=kw@name:id=kw 表示定位的元素。@nam 获取这个元素的 name 属性值。

Robot Framework学习笔记(十)------Selenium2Library库

 12、cookie处理

Robot Framework学习笔记(十)------Selenium2Library库

get cookies 获得当前浏览器的所有 cookie 。
get cookie value 获得 cookie 值。key_name 表示一对 cookie 中 key 的 name 。
add cookie 添加 cookie。添加一对 cooke (key:value)
delete cookie 删除 cookie。删除 key 为 name 的 cookie 信息。
delete all cookies 删除当前浏览器的所有 cookies。

 13、验证should contain 

例子:先获取页面的title,赋值给${tt};然后去对比是否等于百度一下你就知道了。

Robot Framework学习笔记(十)------Selenium2Library库

14、表单嵌套

Robot Framework学习笔记(十)------Selenium2Library库

15、下拉框选择

Arguments:[ locator | *values ]。 locator 为定位下拉框;Vlaue 为选择下拉框里的属性值。

Robot Framework学习笔记(十)------Selenium2Library库

16、执行 JavaScript

Execute Javascript 关键字用于使用 JavaScript 代码,参数就是JavaScript 代码

 Robot Framework学习笔记(十)------Selenium2Library库

 

 

 

 

 




 

相关文章: