(一)自定义和浏览器相关的关键字

PYTHON 版本:3.6,不同的版本可能有区别,自己注意下。

以下代码GitHub 版本库地址: https://github.com/blairwind/blog_rf

SeleniumLibrary的扩展文档中提供了3种增加SeleniumLibrary功能的方式。

(1)Plugin API

(2)EventFiringWebDriver

(3)Extending SeleniumLibrary(实际就是继承SeleniumLibrary库)

这里采用继承SeleniumLibrary库的方式。

目录结构如下:这里我们将上一篇中说到的关键字加进来

BlogSeleniumLibrary.__init__.py  的代码

# #-*-coding:utf-8-*-
#
from robot.libraries import BuiltIn
from SeleniumLibrary.base import DynamicCore
from SeleniumLibrary.keywords import (AlertKeywords,
BrowserManagementKeywords,
CookieKeywords,
ElementKeywords,
FormElementKeywords,
FrameKeywords,
JavaScriptKeywords,
RunOnFailureKeywords,
ScreenshotKeywords,
SelectElementKeywords,
TableElementKeywords,
WaitingKeywords,
WebDriverCache,
WindowKeywords)
from SeleniumLibrary.locators import ElementFinder
from SeleniumLibrary.utils import Deprecated, LibraryListener, timestr_to_secs
from SeleniumLibrary import SeleniumLibrary from BlogSeleniumLibrary.keywords import (
KeyboardKeywords) class BlogSeleniumLibrary(SeleniumLibrary): def __init__(self, timeout=5.0, implicit_wait=0.0,
run_on_failure='Capture Page Screenshot',
screenshot_root_directory=None):
self.timeout = timestr_to_secs(timeout)
self.implicit_wait = timestr_to_secs(implicit_wait)
self.speed = 0.0
self.run_on_failure_keyword \
= RunOnFailureKeywords.resolve_keyword(run_on_failure)
self._running_on_failure_keyword = False
self.screenshot_root_directory = screenshot_root_directory
libraries = [
AlertKeywords(self),
BrowserManagementKeywords(self),
CookieKeywords(self),
ElementKeywords(self),
FormElementKeywords(self),
FrameKeywords(self),
JavaScriptKeywords(self),
RunOnFailureKeywords(self),
ScreenshotKeywords(self),
SelectElementKeywords(self),
TableElementKeywords(self),
WaitingKeywords(self),
WindowKeywords(self),
KeyboardKeywords(self)
]
self._drivers = WebDriverCache()
DynamicCore.__init__(self, libraries)
self.ROBOT_LIBRARY_LISTENER = LibraryListener()
self._element_finder = ElementFinder(self) _speed_in_secs = Deprecated('_speed_in_secs', 'speed')
_timeout_in_secs = Deprecated('_timeout_in_secs', 'timeout')
_implicit_wait_in_secs = Deprecated('_implicit_wait_in_secs',
'implicit_wait')
_run_on_failure_keyword = Deprecated('_run_on_failure_keyword',
'run_on_failure_keyword')

BlogSeleniumLibrary.keywords.__init__.py  的代码

from .keyboard import KeyboardKeywords

BlogSeleniumLibrary.keywords.keyboard.py  的代码

 from SeleniumLibrary.base import keyword, LibraryComponent
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
from SeleniumLibrary.locators import WindowManager class KeyboardKeywords(LibraryComponent): def __init__(self, ctx):
LibraryComponent.__init__(self, ctx)
self._window_manager = WindowManager(ctx) @keyword()
def get_chrome_options(self, downloads_path):
'''
自定义chrome启动参数
:param downloads_path: 设置默认的文件下载路径
:return:
'''
chrome_options = Options()
prefs = {
"download.default_directory": str(downloads_path),
}
chrome_options.add_experimental_option('prefs', prefs) # 设置默认的文件下载路径
chrome_options.add_argument('disable-infobars') # chrome76以下禁用chrome受自动软件控制
# 下面2行chrome76及以上禁用chrome受自动软件控制
chrome_options.add_experimental_option("useAutomationExtension", False)
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
return chrome_options @keyword()
def open_browser_new(self, alias=None,**kwargs):
'''
:return:
'''
desired_caps = {
"platform": kwargs["platform"], #操作系统
# "platform":"LINUX",
"browserName": kwargs["browserName"], #浏览器
"version":kwargs["version"] #浏览器版本
} driver = webdriver.Remote(command_executor=kwargs["remote_url"],
desired_capabilities=desired_caps,
options=kwargs["chrome_options"])
return self.ctx.register_driver(driver,alias)

最后,在RF中导入继承SeleniumLibrary后新建的库就行了,如下:

注意在RF中python 包名和类名一样的的话,导入库的时候就只需要填包名就行了,RF可以直接识别到。不一样的话就还需要加上.class名称,下面这个是不使用selenium grid的版本

*** Settings ***
Library BlogSeleniumLibrary #注意这一行不一样
Suite Teardown CLOSE BROWSER *** Variables ***
${browser} Chrome
${login_url} https://account.cnblogs.com/signin *** Test Cases ***
登录-XXXXXX
登录-打开浏览器并进入登录页面 *** Keywords ***
登录-打开浏览器并进入登录页面
${options}= GET CHROME OPTIONS D:/projectname/testdata/downloads
CREATE WEBDRIVER ${browser} chrome_options=${options}
GO TO ${login_url}
SET SELENIUM IMPLICIT WAIT 10
MAXIMIZE BROWSER WINDOW

(二)如果要使用selenium grid呢

上篇中说到在RF中使用selenium grid ,在这里说明下。(为什么不使用RF自带的open browser,原因是个人觉得这种方式更方便添加不同的参数。)可以看到这里新加了一个关键字

当然,既然用了selenium grid,肯定会考虑并发执行用例,以及合并测试报告的问题,这里暂不考虑这个。

     @keyword()
def open_browser_new(self, alias=None,**kwargs):
'''
:return:
'''
desired_caps = {
"platform": kwargs["platform"], #操作系统
# "platform":"LINUX",
"browserName": kwargs["browserName"], #浏览器
"version":kwargs["version"] #浏览器版本
} driver = webdriver.Remote(command_executor=kwargs["remote_url"],
desired_capabilities=desired_caps,
options=kwargs["chrome_options"])
return self.ctx.register_driver(driver,alias)

在RF中调用这个关键字去启动浏览器就行了。当然前提是你要有一个配好的selenium grid环境,remote_url填自己selenium grid的地址。

 *** Settings ***
Library BlogSeleniumLibrary
Suite Teardown CLOSE BROWSER *** Variables ***
${platform} WINDOWS
${browser} chrome
${version} 79
${remote_url} http://192.168.63.1:4444/wd/hub
${login_url} https://account.cnblogs.com/signin *** Test Cases ***
登录-XXXXXX
登录-打开浏览器并进入登录页面 *** Keywords ***
登录-打开浏览器并进入登录页面
${options}= GET CHROME OPTIONS D:/projectname/testdata/downloads #这里是写死的路径,实际项目中应该动态去获取工程路径/testdata/downloads
OPEN BROWSER NEW platform=${platform} browserName=${browser} version=${version}
... chrome_options=${options} remote_url=${remote_url}
GO TO ${login_url}
SET SELENIUM IMPLICIT WAIT 10
MAXIMIZE BROWSER WINDOW

(三)自定义和浏览器无关的关键字(例如:和数据库相关的关键字)

如果有一些关键字用不到selenium 的webdriver,可以考虑独立出来。例如数据库相关的关键字,实现方式以及在RF中的导入方式,可以参考上一篇的mykeyword 关键字的写法。

robot framework笔记(三):扩展SeleniumLibrary库 (自定义关键字)的更多相关文章

  1. robot framework笔记(一):环境配置(基于python3)+在pycharm中编写及运行robot脚本

    (一)使用pip安装robotframework框架和seleniumlibrary库 pip install --upgrade robotframework pip install --upgra ...

  2. Robot Framework(三)创建测试用例

    2.2.1测试用例语法 基本语法 测试用例由关键字在测试用例表中构建.关键字可以从测试库或资源文件导入,也可以在测试用例文件本身的关键字表中创建. 测试用例表中的第一列包含测试用例名称.测试用例从包含 ...

  3. robot framework笔记(二):在RF中自定义chrome启动参数

    (一)在RF中自定义chrome启动参数 这里主要是实现下面2个功能 1.禁用chrome正受自动测试软件控制的提示 2.设置默认的下载路径(一些导出.下载类的功能,将文件下载到指定路径下) 自定义一 ...

  4. robot framework用python扩展编写自定义library

    我的utils.py文件 #!/usr/bin/env python #-*- coding:utf8 -*- __version__ = '0.1' import sys reload(sys) s ...

  5. robot framework 笔记(三),RF安装

    背景: 本来robot framework的安装应该放在一开始写的,因写博客的时候已经装过了,恰巧重装系统又重装了一遍RF RF推荐使用python2, 使用3的话会遇到一些页面非友好的问题 需要的安 ...

  6. Robot Framework - 1 - 测试用例与测试库

    01- 关于测试库(Test libraries) Test libraries provide the actual testing capabilities to Robot Framework ...

  7. Robot Framework自动化测试三(selenium API)

    Robot  Framework  Selenium  API 说明: 此文档只是将最常用的UI 操作列出.更多方法请查找selenium2Library 关键字库. 一.浏览器驱动 通过不同的浏览器 ...

  8. robot framework 笔记(一)

    背景: 平时使用rf时会用到一些方法,长时间不用就会忘记,本文用来记录当做自己的小笔记 内容持续更新中········ 一.robot framework 大小写转换 1.转换小写: ${low} E ...

  9. robot framework 使用三:他们主动浏览器的兼容性

    robot framework 浏览器兼容性测试 上图中黄色圈的地方默认什么都不写,是firefox浏览器.写上ie就是ie浏览器了 firefox最新版本号即可,ie须要设置: 1. IE选项设置的 ...

随机推荐

  1. 转载:Base64编解码介绍

    https://www.liaoxuefeng.com/wiki/897692888725344/949441536192576 Base64是一种用64个字符来表示任意二进制数据的方法. 用记事本打 ...

  2. odoo开发笔记 -- 多个子类继承同一个父类方法的执行顺序

    场景描述: odoo模块化开发的架构理念,科学&高效, 可以让很多业务场景,尽可能松耦合:让开发人员的主要精力,关注在当前的业务逻辑: 所谓「前人栽树,后人乘凉」,模块整体好比一棵大树, 开发 ...

  3. Win10 高频率使用的快捷组合键

    Win10 系统有很多的快捷组合键,学会使用这些快捷组合键可以节省一点时间 0x01 Win+D 显示或最小化桌面在键盘上按下Win+D可以切换显示桌面或最小化桌面所有内容: 0x02 Ctrl+Sh ...

  4. linux系统上传下载命令rz和sz的教程

    (一)安装方法汇总(注意:一下命令如果没有权限的需要在每个命令前面加一个sudo) 1.安装方法(推荐) sudo yum install lrzsz 2.在安装Linux系统时选中“DialupNe ...

  5. Could not get JDBC Connection; nested exception is java.sql.SQLException: ${jdbc.driver}

    在一个SSM分布式项目中一个服务报错: ### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnec ...

  6. Shell流程控制语句for

    for语法格式: for 变量 in 参数列表 do 命令 done 或者 for 变量 in 参数列表 ; do 命令 done for语句流程控制图: 实例: [root@youxi1 ~]# v ...

  7. springboot 整合Elasticsearch

    Elasticsearch Elasticsearch 是一个分布式.可扩展.实时的搜索与数据分析引擎. 它能从项目一开始就赋予你的数据以搜索.分析和探索的能力,可用于实现全文搜索和实时数据统计. 在 ...

  8. EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器的视频直播录像、检索、回放方案

    需求背景: 近期遇到客户反馈对于直播摄像机录像功能是有一定的需求点的,其实EasyDarwin团队早就研发出对应功能,只是用户对于产品没有足够了解,因此本篇将对录像功能来做一次介绍. 首先,录像就是对 ...

  9. Java设置文件权限

    今天遇到一个问题: java写的API,ppt转图片生成的目录及文件 在使用php调用API完成后,再使用php进行删除时,遇到了删除失败的问题(php删除的部分  查看) 部署的环境是Ubuntu ...

  10. 逸鹏说道公众号福利:逆天常用的一些谷歌浏览器插件V1.3

    插件导出:http://www.cnblogs.com/dunitian/p/5426552.html 插件导入:https://www.cnblogs.com/dotnetcrazy/p/97537 ...