我正在编写一个机器人脚本,它可以浏览请求一次性密码(OTP)的页面。流程是脚本将打开一个应用程序,然后它将等待一个OTP,我将手动将OTP输入到机器人脚本中,使其继续运行。然而,它不适合我。
到目前为止我写的是:
test.robot
***Settings***
Variables OTP.py
***Test Cases***
Open Application
Open Application
Enter OTP
Sleep 5
Input Text textbox ${otp}
OTP.py
otp = "12345"
所以我要做的是运行应用程序,当应用程序到达提示OTP的页面时,在睡眠期间(5),我将在OTP.py中更改OTP的值,以便机器人脚本调用正确的值,继续进行。但是,它总是返回前一个值(在更改之前,在本例中为12345)。
有人知道我可以在执行过程中动态更改值吗?非常感谢,谢谢!
首先,最好的解决方案为用户输入测试期间将Dialogs
图书馆这是标准库的一部分。所以你的例子看起来像:
*** Settings ***
Library Dialogs
*** Keywords ***
Enter OTP
${otp} Get Value From User Please provide OTP code
Input Text textbox ${otp}
但这种解决方案远不可靠,而且依赖于用户交互。更好的解决方案是使用pyotp
编写自定义python关键字,该关键字将生成OTP代码。这种关键字的示例如下:
# OTPCodes.py
import pyotp
class OTPCodes:
def generate_otp_code(self, secret):
totp = pyotp.TOTP(secret)
return totp.now()
and in robot:
*** Settings ***
Library OTPCodes.py
*** Keywords ***
Enter OTP
${otp} Generate Otp Code <SECRET>
Input Text textbox ${otp}
更好的解决方案是不将SECRET
作为参数传递,而是从环境变量中获取。