【问题标题】:How can an Xpath be written for search results that change如何为更改的搜索结果编写 Xpath
【发布时间】:2017-02-09 04:29:33
【问题描述】:

我有一个场景,我正在用文本“A”填充搜索字段,它会返回一堆结果。这些结果总是在变化,我只想选择前 5 个选项。怎么可能为此编写 Xpath。我正在尝试使用 codecption 编写验收测试

.//*[@id='js_search_table_filter'] - 是搜索表过滤器。我在下面输入 A

 $this->fillField($_sSelectSearchXPath,"A");

当我点击搜索结果的复选框选项时的 xpath 元素就像

.//*[@id='assign-9488'].



<label class="checkbox checked" for="assign-9488">

请注意,这些数字各不相同,并且不按时间顺序排列。

【问题讨论】:

    标签: xpath selenium-webdriver automation automated-tests codeception


    【解决方案1】:

    我使用了这些人并尝试选择下拉列表中的所有复选框 (.//*[@type='checkbox'])[1]

    【讨论】:

      【解决方案2】:

      我不确定 codeception/php 版本是如何工作的,但在 ruby​​(watir 或 pageobjectgem)中,您可以使用正则表达式或部分匹配来识别所有元素

      元素看起来像:

      checkboxes(:your_element_name, :id => /assign/)
      

      注意 checkbox 和 checkboxes 之间的区别,它返回所有 id 包含 assign 的复选框。

      在 Java Webdriver 中,你有

          driver.findElements(By.xpath("//checkbox[contains(@id,'assign')]"));
      

      representatinos(ruby 和 java)都返回 Java 解决方案使用 xpath 的元素数组。您提到的元素是标签,如果您正在寻找复选框,它可能是该标签的子元素,xpath 将是

              //label[contains(@for,'assign')]/checkbox
      

      基本上,您可以在 xpath 中使用“包含”方法来识别您的元素。然后,您可以获取数组的前五个元素。

      【讨论】:

        【解决方案3】:

        我不确定这是否是您所追求的,但如果您需要节点集的前 5 个元素,您可以使用以下后缀:

        [position() <= 5]
        

        例子:

        <a>
            <b>1</b>
            <c>2</c>
            <d>3</d>
            <e>4</e>
            <f>5</f>
            <g>6</g>
        </a>
        

        如果要获取bf 的元素,可以运行/a/*[position() &lt;= 5]

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多