如何使用机器人框架运行无头 REMOTE chrome

Posted

技术标签:

【中文标题】如何使用机器人框架运行无头 REMOTE chrome【英文标题】:How to run headless REMOTE chrome using robot framework 【发布时间】: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(至少如果你在这里寻求本地解决方案) 【参考方案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

【讨论】:

以上是关于如何使用机器人框架运行无头 REMOTE chrome的主要内容,如果未能解决你的问题,请参考以下文章

在无头模式下运行 Chrome

Firefox 无头在无头 redhat linux 机器上崩溃

如何在 Windows 7 上关闭无头图形环境

ImportError:无法加载需要“tk”交互式框架的后端“TkAgg”,因为“无头”当前正在运行

有没有办法在无头机器上使用使用硬件加速 OpenGL 的应用程序?

您如何将无头 Chrome 与 Selenium 一起使用?