【问题标题】:Unable to run Robot Framework tests in headless mode from Linux server - WebDriverException无法从 Linux 服务器以无头模式运行 Robot Framework 测试 - WebDriverException
【发布时间】:2019-02-06 16:10:03
【问题描述】:

我们正在尝试以无头模式在 Linux 服务器上运行机器人框架测试。运行机器人测试时,我们收到错误:WebDriverException:消息:未知错误:Devtools 端口号文件内容 采用意外格式。

Robot 测试中的 chromedriver 路径设置正确。Curl 命令在此 Linux 服务器上使用 chromedriver 2.30 和 chrome 60.0 版本成功。因此,可能是我们在 Robot 配置中缺少的东西导致了这个问题。

用两种组合测试,结果是一样的:

Robot Framework-Selenium2Library v3.0,Chrome 版本:60.0.3112.90,Chromer 驱动版本:2.30.477691

Robot Framework-Selenium2Library v3.0,Chrome 版本:73.0.3683.20,Chromer 驱动版本:2.46

*** Settings ***
Library           Selenium2Library
Library           OperatingSystem

*** Variables ***
${url}            https://www.google.com/


*** Test Cases ***
Simple UI Login

Log     Creating WebDriver   WARN
${chrome_options}=  Evaluate  sys.modules['selenium.webdriver'].ChromeOptions()  sys,selenium.webdriver
${ws}=    Set Variable    window-size=1920,1080
Call Method   ${chrome_options}   add_argument     test-type
Call Method   ${chrome_options}   add_argument     --no-sandbox
Call Method   ${chrome_options}   add_argument     --disable-setuid-sandbox
Call Method   ${chrome_options}   add_argument    --headless
Call Method   ${chrome_options}    add_argument    ${ws}
Call Method   ${chrome_options}   add_argument     --disable-gpu
${options}=  Call Method   ${chrome_options}    to_capabilities
Create WebDriver   Chrome   executable_path=/opt/chromedriver/2.30/chromedriver
desired_capabilities=${options}
Go To   ${url}

预期:测试在无头模式下成功运行。

实际 : OTC[001] : 简单的 UI 登录 :: 示例测试用例演示简单... |失败 | WebDriverException:消息:未知错误:Chrome 无法启动:异常退出 (驱动信息:chromedriver=2.30.477691 (6ee44a7247c639c0703f291d320bdf05c1531b57),platform=Linux 3.10.0-862.14.4.el7.x86_64 x86_64)

【问题讨论】:

  • 你可以使用最新的 SeleniumLib 3.3.1,因为你可以在使用 Open Browser 关键字时简单地选择 Headless Chrome。
  • 如果您能设法将所有组件升级到最新版本:Robot Framework、Selenium Library、Selenium、ChromeDriver 和 Chrome。
  • 参数test-type 对我来说很突出——它被定义为'Type of the current test harness ("browser" or "ui")',但是——你没有给出这两个值中的任何一个;也不以“--”为前缀?我必须承认,我以前没有见过或使用过它,在这里在黑暗中拍摄。
  • 使用 SeleniumLib 3.3.1 版本、Selenium2Library 3.0.0、Chrome 73.0.3683.20 测试,Chromer 驱动程序版本:2.46。我收到此错误:OTC[001] : Simple UI login :: 示例测试用例演示简单... |失败 | WebDriverException:消息:未知错误:Devtools 端口号文件内容 采用意外格式(驱动程序信息:chromedriver=2.46.628388(4a34a70827ac54148e092aafb70504c4ea7ae926),平台=Linux 3.10.0-862.14.4.el7.x86_64 x86_64)
  • Todor - 添加或删除该选项也没有任何变化。 BTW,--test-type基本上是--enable-automation的2014版

标签: linux selenium robotframework headless selenium2library


【解决方案1】:

我不确定您对 SeleniumLibrary 3.3.1 的尝试是什么,所以这里是我用来在无头模式下在 Linux 服务器上运行测试的方法。这些是我安装的不同版本:

  • Chrome 版本 72.0.3626.96
  • ChromeDriver 72.0.3626.69 (3c16f8a135abc0d4da2dff33804db79b849a7c38)
  • 机器人框架==3.1.1
  • robotframework-seleniumlibrary==3.3.1
  • 硒==3.141.0

从 SeleniumLibrary 3.1.0 开始,使用 Selenium 3.8.0 或更高版本,Open Browser 支持 Headless Firefox 和 Headless Chrome。这意味着您无需任何额外的 webdriver 配置即可使用无头模式。

*** Settings ***
Library     SeleniumLibrary

*** Test Cases ***
Headless Browser Test
    [Setup]    Open Browser    https://stackoverflow.com    Headless Chrome
    Maximize Browser Window

    Title Should Be    Stack Overflow - Where Developers Learn, Share, & Build Careers

    [Teardown]    Close Browser

【讨论】:

    【解决方案2】:

    我有一个工作示例,您可以使用它来检查 google.com 的标题。

    *** Settings ***
    Documentation
    ...    Basic Test for Google.com in headless mode
    
    Library    Collections
    Library    DateTime
    Library    Dialogs
    Library    OperatingSystem
    Library    SeleniumLibrary
    Library    String
    Library    RequestsLibrary
    
    Suite Setup    Setup Environment and Open Browser
    Suite Teardown    Close All Browsers
    
    *** Variables ***
    ${BROWSER}      HeadlessChrome
    ${SITE_URL}     https://www.google.com
    
    *** Test Cases ***
    
    Title Test
        Title Should Be    Google
    
    *** Keywords ***
    Open Chrome Browser To URL
        [Documentation]    Open Chrome browser and navigate to URL with browser options set
        [Tags]  open_chrome_browser
        ${browserOptions}    Run Keyword If    'Headless' in '${BROWSER}'    Set Headless Chrome Options
        Create Webdriver    Chrome    chrome_options=${browserOptions}
        Go To    ${SITE_URL}
        Maximize Browser Window
    
    Browser timeout and speed
        [Documentation]
        ...    Set browser timeout and speed
        Set Selenium Timeout   30s
        Set Selenium Speed   0s
    
    Set Headless Chrome Options
        [Documentation]
        ...     Set the Chrome options for running in headless mode.  Restrictions do not apply to headless mode.
        [Tags]   headless_chrome_options
        ${chromeOptions}    Evaluate    sys.modules['selenium.webdriver'].ChromeOptions()    sys
        Call Method    ${chromeOptions}    add_argument    test-type
        Call Method    ${chromeOptions}    add_argument    --headless
        Call Method    ${chromeOptions}    add_argument    --disable-extensions
        Call Method    ${chromeOptions}    add_argument    --disable-gpu
        Call Method    ${chromeOptions}    add_argument    --disable-dev-shm-usage
        Call Method    ${chromeOptions}    add_argument    --no-sandbox
        [Return]  ${chromeOptions}
    
    Setup Environment and Open Browser
        [Documentation]
        ...    This keyword will establish the environment variables and open a browser
        [Tags]    simple_test
    
        Open Chrome Browser To URL
        Browser timeout and speed
    '''
    

    【讨论】:

      猜你喜欢
      • 2021-12-07
      • 2016-12-02
      • 2018-05-08
      • 1970-01-01
      • 2020-12-02
      • 1970-01-01
      • 2015-03-08
      • 2012-04-24
      • 1970-01-01
      相关资源
      最近更新 更多