You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 16:35:40