当前位置: 首页 > 面试题库 >

如何在XPATH中使用变量(应在关键字或测试中设置哪个值)?

公孙鸿才
2023-03-14
问题内容

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

包含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的定义,关键字和测试均位于单独的文件中,谢谢!


问题答案:

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

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

*** 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

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

请原谅任何错别字和轻微的语法遗漏-在手机上键入那么多字并不容易,下一次在使用:D之前我会三思而后行



 类似资料:
  • 我想编写一些测试,检查部署的WAR的XML Spring配置。不幸的是,有些bean需要设置一些环境变量或系统属性。在使用@ContextConfiguration的方便测试样式时,如何在spring bean初始化之前设置环境变量?

  • 这是我在INNO设置中的三个示例部分。我想在INI部分使用。我该怎么做?

  • 问题内容: 我想编写一些测试来检查已部署WAR的XML Spring配置。不幸的是,某些bean需要设置一些环境变量或系统属性。通过@ContextConfiguration使用便捷的测试样式时,如何在初始化Spring bean之前设置环境变量? 如果我用注释配置应用程序上下文,那么在初始化spring上下文之前,我看不到钩子可以在其中做些事情。 问题答案: 您可以在静态初始化程序中初始化Sys

  • 问题内容: 我正在尝试从表中读取数据。该表具有表名列表。 对于数据集的每一行,我想运行几个查询以提取数据并将其插入到临时表中。 这是我所做的 每次我运行此查询时,都会出现此错误 我不知道为什么,因为我在上面的代码中看到了在顶部声明此变量的原因。 取得输出并手动执行。它没有问题,并且该变量将具有应有的datetime值。 问题答案: 您需要使用执行动态查询,可帮助您 变量 演示版

  • 我使用了Moxy的。 在应用程序的其他地方,我需要XSLT2.0,所以我在类路径中包含了Saxon HA9.5。但这导致了XPath失败(找不到节点,与JDK的实现不同)。 如何为MOXy设置要使用哪个XML/XPath impl? 目前,我在JAXB bean的旁边使用,但我可以使用一些工厂选项或类似的方式创建封送器。 附加问题:我认为XPath的问题是XML文件使用了名称空间, 我如何使Sax

  • 问题内容: 我有一段JS代码来生成随机数,并将它们输出为变量,以代替旋转值在此使用 上面的代码工作正常,但是当我尝试将javascript中的变量粘贴进去时,我无法正常工作。我是新来的人,所以我90%肯定我只是没有正确了解该变量的语法(严重的是,我很难记住某些内容是否需要方括号,引号,波浪状等,我已经尽力了。) 。 或可能是因为变量是函数的局部变量,而CSS无法读取该变量。 因此,基本上,我只需要