【问题标题】:How to run headless REMOTE chrome using robot framework如何使用机器人框架运行无头 REMOTE chrome
【发布时间】:2018-03-30 10:39:58
【问题描述】:

我正在尝试使用我的机器人框架测试套件运行 chrome headless。 我设法使用 selenium 使用 python 独立完成,如下所示:

options = webdriver.ChromeOptions()
options.add_argument('--headless')
my_driver = webdriver.Remote(command_executer=my_remote_address, desired_capabilities=options.to_capabilities)

下面的代码是我在机器人中做的,但是没有用:

${options}=  Evaluate  sys.modules['selenium.webdriver'].ChromeOptions()  sys, selenium.webdriver
${options.add_argument}=  Set Variable  add_argument=--headless
Create WebDriver  Chrome  chrome_options=${options}

Open Browser   http://www.google.com   chrome

【问题讨论】:

  • 跳过几个答案,它现在是一个单一的:Open Browser http://www.yoursite.com headlesschrome(至少如果你在这里寻求本地解决方案)

标签: robotframework selenium2library


【解决方案1】:

在较新版本的 SeleniumLibrary (3.1.0) 和 Selenium (3.8.0) 中,您只需将浏览器设置为 headlesschrome 而不是 chrome

还有headlessfirefox 可用。

例如

Open Browser      http://www.yoursite.com    headlesschrome

http://robotframework.org/SeleniumLibrary/SeleniumLibrary.html#Open%20Browser

【讨论】:

  • 很高兴我向下滚动!
  • 该示例将打开一个本地无头 chrome。问题是关于连接到 Selenium Grid 并启动远程无头 chrome 实例。
【解决方案2】:

要无头运行,您需要设置参数并将它们转换为功能,以便在使用 Remote Driver 选项时可以使用它们。这适用于 Open BrowserCreate Webdriver 导航到 URL 的方式。

*** Settings ***
Library    Selenium2Library

Suite Teardown    Close All Browsers

*** Test Cases ***
Headless Chrome - Create Webdriver
    ${chrome_options} =     Evaluate    sys.modules['selenium.webdriver'].ChromeOptions()    sys, selenium.webdriver
    Call Method    ${chrome_options}   add_argument    headless
    Call Method    ${chrome_options}   add_argument    disable-gpu
    ${options}=     Call Method     ${chrome_options}    to_capabilities      

    Create Webdriver    Remote   command_executor=http://localhost:4444/wd/hub    desired_capabilities=${options}

    Go to     http://cnn.com

    Maximize Browser Window
    Capture Page Screenshot

Headless Chrome - Open Browser
    ${chrome_options} =     Evaluate    sys.modules['selenium.webdriver'].ChromeOptions()    sys, selenium.webdriver
    Call Method    ${chrome_options}   add_argument    headless
    Call Method    ${chrome_options}   add_argument    disable-gpu
    ${options}=     Call Method     ${chrome_options}    to_capabilities     

    Open Browser    http://cnn.com    browser=chrome    remote_url=http://localhost:4444/wd/hub     desired_capabilities=${options}

    Maximize Browser Window
    Capture Page Screenshot

【讨论】:

  • 对于第二种解决方案 (Open Browser [...] chrome),当将选项传递为 chrome_options=${chrome_options} 时,可以保存对 to_capabilities 的调用。
  • @A.Kootstra 为什么在打开的浏览器中需要remote_url
  • 使用 Selenium Grid 时,这是 Grid Server 的 url。
【解决方案3】:

请尝试以下。在测试设置中运行关键字

Running the tests in chrome headless
    ${chrome options} =     Evaluate    sys.modules['selenium.webdriver'].ChromeOptions()    sys, selenium.webdriver
    Call Method    ${chrome options}   add_argument    headless
    Call Method    ${chrome options}   add_argument    disable-gpu
    Create Webdriver    Chrome    chrome_options=${chrome options}

【讨论】:

    【解决方案4】:

    您现在可以使用别名:

    *** Settings ***
    Library    SeleniumLibrary
    
    *** Test Cases ***
    Firefox
        Open Browser    http://robotframework.org/    headlessfirefox
        Capture Page Screenshot
        [Teardown]    Close All Browsers
    
    Chrome
        Open Browser    http://robotframework.org/     headlesschrome
        Capture Page Screenshot
        [Teardown]    Close All Browsers
    

    https://github.com/robotframework/SeleniumLibrary/pull/1011

    【讨论】:

      【解决方案5】:

      试试这两个关键字:

      Open Chrome
          [Arguments]    ${url}    ${lang}
          ${chrome_options}=    Evaluate    sys.modules['selenium.webdriver'].ChromeOptions()    sys, selenium.webdriver
          Call Method    ${chrome_options}    add_argument    headless
          Call Method    ${chrome_options}    add_argument    disable-gpu
          Create Webdriver    Chrome    chrome_options=${chrome_options}
          Go To    ${url}
      
      Open Remote Chrome
          [Arguments]    ${url}    ${remote_url}    ${lang}
          ${chrome_options}=    Evaluate    sys.modules['selenium.webdriver'].ChromeOptions()    sys, selenium.webdriver
          Call Method    ${chrome_options}    add_argument    headless
          Call Method    ${chrome_options}    add_argument    disable-gpu
          Open Browser    ${url}    Chrome    remote_url=${remote_url}    desired_capabilities=${chrome_options.to_capabilities()}
      

      第一个将启动本地 chrome,而第二个将启动远程 chrome。如果您需要能够将远程与本地处理成单个关键字,您可以使用布尔参数围绕这两个创建一个包装器,该参数将确定要调用哪个关键字。

      【讨论】:

        【解决方案6】:
        ${options}=  Evaluate  sys.modules['selenium.webdriver'].ChromeOptions()  sys, selenium.webdriver
        Call Method    ${options}    add_argument    headless
        Call Method    ${options}    add_argument    disable-gpu
        Create WebDriver  Chrome  chrome_options=${options}
        Goto  https://www.cnn.com/
        Wait Until Page Contains    Politics today
        Close Browser
        

        【讨论】:

          猜你喜欢
          • 2018-07-02
          • 1970-01-01
          • 2019-03-21
          • 2019-11-01
          • 2017-07-26
          • 2019-03-15
          • 2017-11-22
          • 2016-12-31
          • 1970-01-01
          相关资源
          最近更新 更多