【问题标题】:Using one browser session in multiple robot framework tests在多个机器人框架测试中使用一个浏览器会话
【发布时间】:2018-09-16 22:59:23
【问题描述】:

我的测试是使用 selenium 和 Chrome 用 python 编写的,这是我想在 .robot 中执行的操作:

Start New Session

Perform test 1

Perform test 2

这可能吗?因为发生的事情是每一行都忘记了有一个 Web 浏览器打开并崩溃。我尝试将它作为 self.driver 保存在 python 中,但它被删除了。为了让它工作,我在机器人文件中创建了一个 ${DRIVER} 变量,然后让套件设置输出 ${DRIVER},然后我将 ${DRIVER} 传递给每个测试。

*** Variables ***
${DRIVER}     

*** Keywords ***
Start New Session
    ${DRIVER}    ${fail} =    Open Browser    ${ADDR}    ${DRIVER_LOCATION}
    run keyword if    ${fail}==1    fatal error
    Set Suite Variable    ${DRIVER}
    reset_demo    ${DRIVER}
    begin_demo    ${DRIVER}

Perform Test 1
    abc    ${DRIVER}
    xyz   ${DRIVER}

etc.

它有效,但它很丑。我认为 Robot Framework 的重点是看起来像自然语言,所以看起来应该有一种不那么笨拙的方法来做到这一点。我用谷歌搜索了所有我能想到的方法,但一无所获,也许我不知道词汇。

【问题讨论】:

  • 另外,我所有的 python 函数都使用 self.driver,但是如果我也直接从 .robot 调用该函数,则必须接受第二个副本 ${DRIVER} 作为函数参数。
  • 您的真正问题是什么?您是使用Selenium2Library 还是SeleniumLibrary,还是自己编写?
  • 你自定义的open browser关键字是用python写的,还是机器人关键字?
  • 基于这个问题(以及@BryanOakley 回答的 cmets),我真的想敦促您用简单、实用的术语解释您想要做什么。您所说的一切都没有向我表明您所做的事情需要自定义 Python 开发。几乎所有简单的打开浏览器到站点并点击周围的示例都可以使用开箱即用的关键字来完成。因此,请提供公共网站的minimal reproducible example 并从那里获取。

标签: python selenium robotframework


【解决方案1】:

我从未见过有人以这种方式使用 selenium,您需要引用驱动程序对象。但是,如果您的目标是创建看起来像自然语言的关键字,他们只需要使用套件变量而不是将其传递给他们。

*** Keywords ***
Start New Session
    ${DRIVER}    ${fail} =    Open Browser    ${ADDR}    ${DRIVER_LOCATION}
    run keyword if    ${fail}==1    fatal error
    Set Suite Variable    ${DRIVER}
    reset_demo
    begin_demo

reset_demo
    ${DRIVER}  blah blah
begin_demo
    ${DRIVER}  blah blah

如果你的reset_demobegin_demo关键字是用python写的,可以调用BuiltIn().get_variable_value('${DRIVER}')获取值

【讨论】:

  • 也许我的问题出在 python 方面?几乎所有东西都需要对象,我该如何避免呢?示例:driver.find_element_by_link_text('abc123')
  • @Seth:我对你的真正问题有点困惑。您是在编写自己的 selenium 库,还是在使用它但编写了自己的 open browser 关键字,或者还有其他我不理解的东西?
  • 我编写了自己的 open_browser 关键字,因为我的代码需要在多个平台上运行。我只是想用 selenium 做一些基本的事情,比如单击网页上的复选框并输入一些文本,然后将其交给下一个测试。我的目标是进行一堆小型的、易于管理的测试,我希望有一个干净且易于阅读的机器人文件,基本上让它变得如此简单以至于万无一失……即使对于客户也是如此。传递 ${DRIVER} 只是 感觉 错误,因为我阅读的教程或示例都不是这样,一切都在幕后。但也许我错了。
  • @Seth:好的,这是一个完全不同的问题。您只需将自定义驱动程序元素传递回 selenium2library。在机器人级别没有必要这样做,这一切都应该在 python 中完成。你是对的,你不需要绕过司机。您的问题不是“如何传递驱动程序”,而是“如何创建 seleniumlibrary 可以使用的自定义驱动程序”。
猜你喜欢
  • 2017-09-09
  • 1970-01-01
  • 2021-03-29
  • 1970-01-01
  • 2018-03-06
  • 2013-02-07
  • 2018-04-01
  • 2016-09-06
  • 2020-06-04
相关资源
最近更新 更多