Python+Robot Framework实现系统登陆

1 背景说明

部门要做所有系统的线上UI登陆巡检,采用的是Python+Robot Framework框架。这里做一下记录,只分享编写的脚本结构和思路,不涉及Robot Framework部署安装。

2 分析设计和方案选择

手动操作登陆过程主要是:

  1. 打开浏览器
  2. 输入用户名、密码
  3. 识别和输入验证码
  4. 点击登陆,判断登陆结果
  5. 退出浏览器

其中, 验证码类型为:
在这里插入图片描述

  • 因为只实现登陆系统,可以直接在Test Cases区域中编写登陆步骤。
  • 但为了脚本维护的方便,最好将Test Cases区域作为用例逻辑的组织区域,将登陆步骤分解后,在Keywords区域单独维护和处理。这样后续有步骤需要调整时,可以在相应内容中编辑即可,清晰明了。
  • 这里采用以下的脚本结构
*** Settings ***
# 引入相应库文件
*** Variables ***
# 定义变量
*** Test Cases ***
# 将登陆过程组织起来,形成逻辑
*** Keywords ***
# 实现每一个单独的登陆步骤

  • 识别验证码是难点,经过查找和比较,最后选用识别率相对较高的ddddocr,但是验证码的识别率依然不高,尤其是对于运算符号的识别。

为了提升验证码输入的准确性(有时候存在登陆次数限制),需要在输入验证码结果之前,先对验证码识别结果进行一次过滤,如果发现有错误,就点击更新验证码,并重新识别。(这层过滤体现在下文中的capcha_result.py文件中,并在Input Capcha中进行了判断)

3 具体实现

部门的框架目录
在这里插入图片描述

common中放我们自己写的一些方法或函数
monitor中为各个系统的登陆脚本

相应的robot文件

*** Settings ***
Documentation     XX系统
Library           Selenium2Library
# 引入自己写的验证码识别文件
Library           ../common/capcha_result.py

*** Variables ***
${LOGIN URL}      https://......./login
# chrome前台执行,headlesschrome后台静默执行
${BROWSER}        headlesschrome
# 登录信息(字典)
&{USERINFO}       username=XXX     password=XXXX

*** Test Cases ***
Login Platform
    [Documentation]     系统登陆

    Open Browser To Login Page
    Input Username  ${USERINFO.username}
    Input Password  ${USERINFO.password}
    # 输入验证码,尝试4次
    FOR    ${var}    IN RANGE    4
            Input Capcha
            Submit Credentials
            ${result}   run keyword and return status   Input Information Is Correct
            Exit For Loop If     ${result}==True
            Run KeyWord If  ${var}==3   Close Browser
    END
    Home Page Should Be Open
    [Teardown]    Close Browser

*** Keywords ***
Open Browser To Login Page
    # 打开网址
    Open Browser    ${LOGIN URL}    ${BROWSER}
    # 等待,直到捕获到页面元素,这里用系统名称
    Wait Until Page Contains Element    xpath=……
    # 断言title
    Title Should Be    XXX平台

Input Username
    # 输入账号
    [Arguments]    ${username}
    Input Text    xpath=……   ${username}

Input Password
    # 输入密码
    [Arguments]    ${password}
    Input Text    xpath=……    ${password}

Input Capcha
    FOR     ${var}   IN RANGE   100
            # 点击更新验证码
            click element  xpath=………
            sleep    1
            # 验证码截屏
            ${filepath}     Capture Element Screenshot     xpath=………    验证码.png
            # 通过图片扫描出图片中的数字
            ${capcha}       capcha_result      ${filepath}
            Exit For Loop If     ${capcha} != False
    END
    # 输入验证码
    Input Text    xpath=………    ${capcha}

Input Information Is Correct
	# 等待2秒,断言验证码消失,说明进入登陆页面
    Sleep    2
    Page Should Not Contain Image    xpath=………

Submit Credentials
    # 点击登录按钮
    Click Button    xpath=………

Home Page Should Be Open
    Sleep    10
    # 断言左上角的LOGO
    PAGE SHOULD CONTAIN ELEMENT   xpath=………

capcha_result.py文件内容

import ddddocr

def capcha_result(imgname):

    ocr = ddddocr.DdddOcr()
    with open(imgname, 'rb') as f:
        img = f.read()
    img_str = ocr.classification(img)

    try:
        if img_str[1] in ['+','-','*','/']:
            result = eval(img_str[:3])
        else:
            result = False
    except Exception:
        result='验证码计算异常'

    return result
  • 因为运算符的识别率不高,因此先对识别结果是否包含’+‘,’-‘,’*‘,’/'等运算符进行判断,如果包含则返回计算结果,如果不包含则返回False,在Robot脚本判断识别结果为False,就点击更新验证码,重新识别和计算结果,这样可以提高验证码的识别率(应对登陆次数限制的一种方法)

4. 执行和调试

调试阶段,设置 ${BROWSER} chrome ,可在前台看执行过程,调试通过后,可以使用headlesschrome在后台静默执行(Linux下必须要静默执行)

执行脚本可以使用命令 robot 。

robot  xxx.robot

执行完毕,会有报告生成,可以查看。robot命令还有很多其他选项,需要可自查。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值