如何在XPATH中使用变量,哪个值应该在关键字或test中设置?

时间:2016-12-05 11:48:56

标签: selenium testing automation robotframework selenium2library

我需要根据元素包含的值来点击元素。但是我想在测试运行或关键字定义中设置此值(我猜测最佳选项是在测试中) 我该怎么办?

包含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定义,关键字和测试都在不同的文件中 谢谢!

2 个答案:

答案 0 :(得分: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 < / p>

答案 1 :(得分:0)

如何使用<script type="text/javascript"> $(document).ready(function() { $("#region").change(function() { var region= document.getElementById("region").value; var dataString = 'region='+ region; $.ajax ({ type: "POST", url: "get_province.php", data: dataString, cache: false, success: function(html) { $("#province").html(html); } }); }); $("#region").change(function() { var province= document.getElementById("province").value; var dataString = 'province='+ province; $.ajax ({ type: "POST", url: "get_city.php", data: dataString, cache: false, success: function(html) { $("#city").html(html); } }); }); $("#province").change(function() { var province= document.getElementById("province").value; var dataString = 'province='+ province; $.ajax ({ type: "POST", url: "get_city.php", data: dataString, cache: false, success: function(html) { $("#city").html(html); } }); }); }); </script> 关键字?