SeleniumLibrary对话框异常:用户输入对话框点击确定后无法关闭
问题描述
我编写了一个Robot Framework脚本,用于获取用户名、密码和路由器序列号,导航至指定网站完成登录及路由器序列号查询操作。脚本可正常弹出三个输入对话框,但输入序列号并点击确定按钮后,该对话框始终无法关闭。尽管后续脚本仍能正常执行并填充相关信息,但这个弹窗问题一直存在。我是Python新手,恳请提供解决方案。
脚本代码
*** Settings *** Documentation A script that enables SSH on a router in software specified by serial number from the user. Suite Setup Setup chromedriver Library SeleniumLibrary Library OperatingSystem Library Dialogs *** Keywords *** Setup chromedriver Set Environment Variable webdriver.chrome.driver ${EXECDIR}/Users/Me/PycharmProjects/Automation/chromedriver *** Variables *** ${url} https://eco.company.com/manage #${serial} MQ25761000110 ${deviceusernum} Device.Users.User.7.X_OUI_RemoteAccess.1.X_OUI_LANRestriction ${key1} ACCESS_ENABLE ${deviceuserpass} Device.Users.User.7.Password ${key2} P@ssword1 ${deviceport} Device.Users.User.7.X_OUI_RemoteAccess.1.Port ${key3} 22 *** Test Cases *** Get Credentials ${ECO_username}= Get Value From User Enter ECO user name admin Log To Console \n${ECO_username} ${ECO_password}= Get Value From User Enter ECO password hidden=yes Log To Console \n${ECO_password} ${ECO_serial}= Get Value From User Enter router serial serial Log To Console \n${ECO_serial} [Tags] smoke test Open Browser ${url} chrome
解决方案
方法1:替换GUI弹窗为控制台输入
Dialogs库的GUI弹窗可能和Selenium启动的Chrome浏览器存在焦点冲突,导致第三个弹窗无法正常关闭。改用OperatingSystem库的Get Input From Console在控制台输入信息,可避免该问题:
修改测试用例部分代码:
*** Test Cases *** Get Credentials ${ECO_username}= Get Input From Console Enter ECO user name [默认值: admin] Log To Console \n${ECO_username} ${ECO_password}= Get Input From Console Enter ECO password Log To Console \n${ECO_password} ${ECO_serial}= Get Input From Console Enter router serial [默认值: serial] Log To Console \n${ECO_serial} [Tags] smoke test Open Browser ${url} chrome
注:控制台输入无法隐藏密码,若需隐藏密码,可结合Python的getpass库自定义关键字,或改用命令行参数方式。
方法2:调整执行顺序
若必须使用Dialogs库,可尝试先启动浏览器,等待加载完成后再弹出输入对话框,减少焦点冲突概率:
*** Test Cases *** Get Credentials [Tags] smoke test Open Browser ${url} chrome Maximize Browser Window Sleep 2s # 等待浏览器完全加载 ${ECO_username}= Get Value From User Enter ECO user name admin Log To Console \n${ECO_username} ${ECO_password}= Get Value From User Enter ECO password hidden=yes Log To Console \n${ECO_password} ${ECO_serial}= Get Value From User Enter router serial serial Log To Console \n${ECO_serial}
方法3:使用命令行参数传递(推荐自动化场景)
自动化脚本更适合通过命令行参数传递敏感信息和配置值,避免手动输入交互:
*** Test Cases *** Get Credentials # 执行脚本时通过命令行传递参数:robot --variable ECO_USER:admin --variable ECO_PASS:P@ssword1 --variable ECO_SERIAL:MQ25761000110 your_script.robot ${ECO_username}= Get Variable Value ${ECO_USER} default=admin ${ECO_password}= Get Variable Value ${ECO_PASS} default=P@ssword1 ${ECO_serial}= Get Variable Value ${ECO_SERIAL} default=serial Log To Console \nECO用户名: ${ECO_username} Log To Console \n路由器序列号: ${ECO_serial} [Tags] smoke test Open Browser ${url} chrome
内容的提问来源于stack exchange,提问作者5uck3rpunch
相关产品推荐
相关产品推荐

