4

我需要根据元素包含的值单击元素..但我想在测试运行或关键字定义中设置这个值(我猜最好的选择是在测试中)我应该怎么做?

包含 xpath 的变量应如下所示:

${DROPDOWN ITEMS}    xpath=//*[contains(@class,'listitem-element')]/span[contains(text(),'${second_number}')]

当我用“002”之类的实际数字替换变量时,此定位器有效,但我想让它更通用..

在关键字定义中,我像这样使用它:

Choose Value From Dropdown
     focus    ${DROPDOWN ITEMS}
     click element   ${DROPDOWN ITEMS}

在测试中我只调用关键字

我的问题是在哪里以及如何设置xpath 中使用的 ${second_number} 变量的变量值?PS:xpath 定义、关键字和测试都在单独的文件中,谢谢!

4

4 回答 4

4

我在我的 SUT 中使用了类似的方法,因为它适用于相当复杂的对象,包括在测试执行期间预先创建和动态生成的 - 并且它们的主要用户可识别属性是显示的名称。这是我的流程的简化版本,它基于字符串替换。

从变量文件开始——一个简单的 selenium 定位器集合,定位器的值有一个“特殊”字符串,稍后将被替换:

*** VARIABLES ***
    ${DROPDOWN ITEMS}    xpath=//*[contains(@class,'listitem-element')]/span[contains(text(),'SELENIUM_PLACEHOLDER_CHANGE_ME')]

然后,在关键字文件中有用于返回正确定位器的私有关键字,例如这个:

*** KEYWORDS ***
    _Return Selenium Locator For The Dropdown Item Named
        [Documentation]    Verifies the desired dropdown item is valid, ando returns its locator (not Webelements!!)
        [Arguments]    ${name}

        # change the placeholder with the actual UI name
        ${loc}=    Replace String  ${DROPDOWN ITEMS}    SELENIUM_PLACEHOLDER_CHANGE_ME    ${name}

        # why? Rationale explained below
        Element Should Be Visible    ${loc}    message=The dropdown does not have an item called ${name}

        [Return]    ${loc}

为什么要进行能见度检查?简单 - 如果 SUT 中当前没有这样的对象,则尽早失败,并具有统一的错误消息,与元素如何进一步使用无关(单击、检查存在、属性检索等)

然后,用于对元素执行操作的后续用户关键字使用前一个:

    # the user keywords
    Choose Value From Dropdown
        [Documentation]    It does what it does :)
        [Arguments]    ${the value}

        ${loc}=    _Return Selenium Locator For The Dropdown Item Named    ${the value}

        # as you can see, no checks is the element real - that'she offloaded to the helper keyword ^
        Focus Element    ${loc}
        Click Element    ${loc}

最后,测试用例使用关键字来处理您认为需要的任何数据:

*** TESTCASE ***
The dropdown should do X
    [Documentation]    Steps: 1, 2, 3, etc

    # do the normal steps you'do do
    Choose Value From Dropdown    my current value

这种方法也适用于负面测试 - 例如,要检查值不存在,测试用例将包含:

    Run Keyword And Expect Error    The dropdown does not have an item called no_such_element    Choose Value From Dropdown    no_such_element

因此,我们都使用 selenium 检查元素的缺失,并保持测试用例接近现实生活中的表达——对应该发生的事情的描述,没有特殊的语法和 SE 关键字。

请原谅任何拼写错误和轻微的语法遗漏 - 在手机上打字并不容易,下次我会三思而后行:D

于 2017-03-11T06:41:47.167 回答
2

您可以在启动测试套件时使用参数定义变量。 这是它的文档

现在,您将保持 xpath 不变。将 ${second_number} 保留在里面。现在您可以在参数或参数文件中定义它。他们做同样的事情,但一个更整洁。只是为了让它工作,我只是担心将它直接放在控制台中。

pybot -v second_number:002 nameOfTestFile.robot

这将告诉 pybot 创建一个名为 ${second_number} 的变量,其值为 002。它不会将其保存在测试中,因此在测试完成后,它会忘记该变量。

一旦这工作,您可以将其移动到参数文件中,或者如果您愿意,您甚至可以在变量文件中定义它,您可以在其中存储所有变量,然后在参数文件/控制台中调用它们。

有任何问题都会问,我会尽力提供帮助

于 2016-12-05T12:40:27.153 回答
0

如何使用set suite variable关键字?

于 2016-12-16T06:23:19.123 回答
0

我们可以使用Evaluate关键字来构建动态变化的 xpath

*** 多变的 ***

${common xpath}    xpath=//label[contains(text(), '{0}')]

${text to be replaced}    my name

*** 关键字 ***

基于用户输入的框架 xpath

${final xpath}    Evaluate    "${common xpath}".format("${text to be replaced}")

log ${final xpath}

结果

在 ${final xpath} 中,您将拥有“ xpath=//label[contains(text(), 'my name')]

于 2021-08-17T11:31:22.557 回答