【问题标题】:Using already opened Browser window in Robot framework在机器人框架中使用已经打开的浏览器窗口
【发布时间】:2017-05-17 19:13:12
【问题描述】:

我们正在使用 Robot Framework 来编写/自动化验收测试用例。

每次我需要运行整个脚本来检查我的脚本的最后几行代码,这会浪费大量时间并在系统中创建大量重复记录,我只是想避免重新运行整个脚本来检查最后几行代码并从上次运行出错的地方继续执行。

也就是说;如果测试运行抛出错误;它不仅会关闭浏览器窗口;并且下次运行将使用相同的浏览器窗口和下一个命令,之后它在上次运行中失败。

【问题讨论】:

标签: selenium robotframework


【解决方案1】:

Robot/Selenium 无法直接实现您的要求,但从您所写的内容来看,我可以看到一些改进的空间:

  • “在系统中创建大量重复记录”=> 您应该在测试中使用 Teardown,以便在测试完成时清理系统(即使出现故障也会运行拆卸)。所以下次你运行测试时,系统会开始干净
  • “这会浪费很多时间” => 如果您的测试太长而无法运行,也许您应该考虑将它们分成更小的块。还可以考虑直接通过 REST 或 SOAP 接口而不是浏览器运行部分测试。

【讨论】:

  • 我将反驳您的第二点 - 在开发过程中,我发现重用打开的浏览器非常有用 - 它为我节省了 20-30 秒用于重新实例化、导航和 SUT 的后端数据检索。这主要与 OP 期望的行为一致——从最后一个故障/终止点恢复执行。我不得不说 - 对于生产用途,这应该只在非常合理的推理和额外的预防措施下完成。
【解决方案2】:

这是一个用于 Firefox (win) 的 geckodriver 示例

在启用 marionette 的情况下启动 Firefox(标准端口为 2828)

"C:\Program Files\Mozilla Firefox\firefox.exe" --marionette

机器人示例脚本

*** Settings ***
Library           SeleniumLibrary

*** Variables ***
${BROWSER}          Firefox
${GECKODRIVER EXE}  c:/MY_GECKODRIVER_PATH/geckodriver.exe
${GECKODRIVER LOG}  C:/MY_GECKODRIVER_LOG_PATH/log.txt

*** Test Cases ***
Firefox Browser Test
    Init Webdriver
    Go To   https://www.google.com
    
*** Keywords ***
Init Webdriver
    ${service_args}=     Create List    --connect-existing    --marionette-port=2828    --marionette-host=127.0.0.1
    Create Webdriver     ${BROWSER}        executable_path=${GECKODRIVER EXE}   service_args=${service_args}    service_log_path=${GECKODRIVER LOG}

-- Chrome 示例--

启动 Chrome 并启用远程调试(端口为 9222)

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222

机器人示例脚本

*** Settings ***
Library           SeleniumLibrary
Library           Collections

*** Variables ***
${BROWSER}          Chrome

${CHROMEDRIVER EXE}  c:/MY_CHROMEDRIVER_PATH/chromedriver93.exe
${CHROMEDRIVER LOG}  c:/MY_CHROMEDRIVER_LOG_PATH/chromedriver_log.txt


*** Test Cases ***
Chrome Browser Test
    Init Webdriver
    Go To   https://stackoverflow.com

*** Keywords ***
Init Webdriver
    ${service_args}=        Create List   --log-path=${CHROMEDRIVER LOG}  --verbose
    ${chromeOptions}=       Evaluate    sys.modules['selenium.webdriver'].ChromeOptions()  sys,selenium.webdriver 
    ${chromeCapabilities}=  Call Method   ${chromeOptions}   to_capabilities
    Set To Dictionary       ${chromeCapabilities["goog:chromeOptions"]}   debuggerAddress   127.0.0.1:9222
    Create WebDriver        ${BROWSER}   desired_capabilities=${chromeCapabilities}   executable_path=${CHROMEDRIVER EXE}   service_args=${service_args}

【讨论】:

    猜你喜欢
    • 2020-06-04
    • 1970-01-01
    • 2017-11-01
    • 2020-10-11
    • 1970-01-01
    • 2017-08-22
    • 2017-08-12
    • 2018-03-21
    • 2019-12-25
    相关资源
    最近更新 更多