1

我正在尝试导入一个 python 模块来骑行超过 3 个小时但没有成功。我在这里完成了第四个答案中解释的步骤,它建议创建一个 python 模块 Selenium2LibraryExt。 如何在机器人框架中获取所有文本?

我观察到的问题是,由于我在同一测试的其他代码中使用 Selenim2Library 现在我导入从 Selenim2Library 继承的 Selenium2LibraryExt,我的测试不再知道例如 Click Element 关键字来自 Selenim2Library 或 Selenium2LibraryExt,它给了我多个关键字错误

所以我做了1-我删除了

       from Selenium2Library import Selenium2Library

从我的python模块的头开始,但我让它在我的测试用例中作为一个库保留:设置

 Library          Selenium2Library  

它没有成功。2-然后我删除了

Library          Selenium2Library  

从我的测试用例,但添加:

  from Selenium2Library import Selenium2Library  

在我的 python 模块的头部。但在这两种情况下我都会出错。我应该如何不让我的测试看到 2 个 selenium2library 库?

谢谢

4

2 回答 2

2

如果您使用继承的库,那么您的测试数据需要导入 Selenium2Library 或您的自定义库,但不能同时导入两者。如果只通过共享资源文件导入,而不是直接在测试中导入,这样更容易控制。

另一种选择是创建一个扩展 Selenium2Library 的库而不替换它:

from robot.libraries.BuiltIn import BuiltIn

class Selenium2LibraryExt(object):

    @property
    def _s2l(self):
        return BuiltIn().get_library_instance('Selenium2Library')

    def get_all_texts(self, locator):
        """Returns the text values of elements identified by `locator`."""
        elements = self._s2l._element_find(locator, False, True)
        return [e.text for e in elements]

如果您使用的是最新版本的 Selenium2Library (>= 1.7),Get Webelement 和Get Webelements允许您做很多没有关键字的事情...

@{texts}    Create List
@{elems}    Get Webelements    some locator
:FOR    ${elem}    IN    @{elems}
\    ${text}    Get Text    ${elem}
\    Append To List    ${texts}    ${text}

同样的事情,但使用扩展变量语法获取文本以使用webelement

@{texts}    Create List
@{elems}    Get Webelements    some locator
:FOR    ${elem}    IN    @{elems}
\    Append To List    ${texts}    ${elem.text}

或者在 Python 中:

from robot.libraries.BuiltIn import BuiltIn

class Selenium2LibraryExt(object):

    def get_all_texts(self, locator):
        """Returns the text values of elements identified by `locator`."""
        s2l = BuiltIn().get_library_instance('Selenium2Library')
        elements = s2l.get_webelements(locator)
        # or elements = BuiltIn().run_keyword('Get Webelements', locator)
        return [e.text for e in elements]

另请参阅https://stackoverflow.com/a/35323931/2532697

于 2016-06-24T18:24:59.093 回答
0

因此,您可以通过指定要使用的特定库轻松解决此问题。例如:

Selenium2LibraryExt.Click Element
于 2016-06-24T14:32:27.067 回答