【问题标题】:Testing Electron application with Selenium (Python - RobotFramework)使用 Selenium 测试 Electron 应用程序(Python - RobotFramework)
【发布时间】:2023-01-29 15:35:47
【问题描述】:

我有一个基于电子(使用 Electron,我们可以使用 JavaScript、HTML 和 CSS 构建跨平台的桌面应用程序)

我可以使用 Selenium 库测试它吗?

【问题讨论】:

    标签: selenium selenium-webdriver automation electron robotframework


    【解决方案1】:
    1. 电子包含 Chromium 和 ChromeDriver,因此它可以与 Chromium 和 Selenium 通信,它只是 Webdriver 实现。
    2. Selenium 需要它才能调用 Electron 应用程序。 ChromeDriver 充当 Selenium 和我们的应用程序之间的桥梁,它遵循 Selenium 有线协议。默认情况下,chromium 在端口 9515 上运行。

      - 演示

      1. 安装并启动 ChromeDriver:我们需要下载与我们的应用程序使用相匹配的 ChromeDriver 版本。

      使用 Python:

      参数:

      • 命令执行器:运行 chromedriver 的本地或远程端口(在我们的例子中是 9515)
      • desired_capabilities:指定 Electron App 可执行文件 (ElectronApp.exe) 位置的字典
      • 远程调试端口:应用程序的端口(在我们的例子中是 7070)

      ==> 在此之后,您应该会看到电子应用程序的第一页弹出!

      使用机器人框架:

      options 参数可用于启动使用 Chromium Embedded Framework 的基于 Chomium 的应用程序。要启动基于 Chomium 的应用程序,请使用选项定义 binary_location 属性并使用 add_argument 方法为应用程序定义 remote-debugging-port 端口。打开浏览器后,测试可以与应用程序交互。

    【讨论】:

      【解决方案2】:

      通过 RobotFramework

      1. 下载Chrome Driver。它必须与 Electron 中的 Chrome 版本相同。

      2. 作为服务启动 chromedriver.exe

        ***Keywords***
        Start WebDriver Service
            ${port}             Convert To Integer      ${portNumber}
            ${service}=         Evaluate        sys.modules['selenium.webdriver'].chrome.service      sys
            ${service}          CallMethod      ${service}      Service         path/to/chromedriver.exe     port=${port}
            Call Method         ${service}      start
        

        ${portNumber} 是 ChromeDriver 端口的变量

        1. 开始电子申请
        Start Electron App
            ${options}=         Evaluate        sys.modules['selenium.webdriver'].ChromeOptions()     sys
            Call Method         ${options}      add_argument                        --remote-debugging-port=7070
            Call Method         ${options}      add_argument                        --no-sandbox
            ${options.binary_location}    Set Variable    path/to/electron/application
            Create WebDriver    Remote          command_executor=127.0.0.1:${portNumber}     options=${options}
        
        

        然后你可以运行像浏览器应用程序这样的测试用例。

      【讨论】:

        最近更新 更多