登陆中出现的问题
在文章《Python+Robot Framework实现系统登陆》中,做了系统的线上UI登陆巡检。其中,在第二节中我们分析了手动操作登陆过程,即:
- 打开浏览器
- 输入用户名、密码
- 识别和输入验证码
- 点击登录,判断登录结果
- 退出浏览器
其实,第三步,在识别和输入验证码后,还需要判断输入的验证码是否则正确,当时的判断逻辑是等待2s,然后断言验证码是否存在,如果存在就说明输入的验证码不对,反之则说明输入的信息是对的。相关的代码见下:
*** Test Cases ***
.....
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
.....
*** Keywords ***
.....
Input Information Is Correct
# 等待2秒,断言验证码消失,说明进入登录页面
Sleep 2
Page Should Not Contain Image xpath=………
.....
最近发现运行时偶有失败,经过排查发现,在输入验证码后点击登录,受到网络波动影响,登录过程比较慢,导致断言的时候验证码还存在,就会误判验证码输入错误。
因此需要添加是否在”登录中“,及是否成功登陆的判断
解决方案
观察登录过程发现,当点击登录按钮后,按钮立即变为“登录中”,此时先进行信息校验,如果校验成功,则进入系统,如果校验失败,则会给出提示信息,同时按钮文字由“登录中”变为“登录”。
所以可以添加如下判断逻辑:
- 点击登录按钮后,获取登录按钮文字,如果是“登录中”,则等待登录按钮消失,然后断言按钮是否不可见,如不可见,返回true,否则返回false
- 如果上一步返回时true,说明登录成功,如果返回false,说明登录失败
代码如下
*** Test Cases ***
.....
FOR ${var} IN RANGE 4
Input Capcha
Submit Credentials
# 判断是否在登录中,如果是在登录中,就等待登录完成
${login_sucess} Run Keyword And Return Status Is Logging In
# 如果是登录中,已经等待登录完成,退出循环
Exit For Loop If ${login_sucess}==True
# 如果达到次数,直接关闭浏览器
Run KeyWord If ${var}==3 Close Browser
END
.....
*** Keywords ***
.....
Is Logging In
# 定义返回值
[Return] ${login_sucess}
${button_text} Get Text xpath=....
# 输出按钮上的文字,方便调试
Log ${button_text}
# 如果是登录中,等待按钮消失,最长等待时间10s,
${is_loging} Run Keyword If '${button_text}'=='登 录 中...' Set Variable True ELSE False
Run Keyword If ${is_loging}==True Wait Until Element Is Not Visible xpath=.... 10s
# 断言登录按钮是否不可见
${login_sucess} Run Keyword And Return Status Element Should Not Be Visible xpath=....
.....
脚本验证
验证脚本的时候,需要模拟网络不佳的情况,可以在脚本中,网页打开后,添加等待时间,这个时候我们调出DevTools,然后将将网速调慢,如选择3G信号,或者在Add中,自行设置,进行验证。