如何为更改的搜索结果编写Xpath

时间:2016-09-30 14:42:46

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

我有一个场景,我填写一个带有文本'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">

请注意,这些数字会有所不同,并且不符合任何时间顺序。

3 个答案:

答案 0 :(得分:0)

我不确定这是否属于您之后的情况,但如果您需要节点集的前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() <= 5]

答案 1 :(得分:0)

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

元素看起来像:

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

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

在Java Webdriver中,你有

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

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

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

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

答案 2 :(得分:0)

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