如何在Codeception中选择第n个元素

4

我有一个表格,每行都有复选框。用户可以选择某些行并删除它们,同时我还有这个“全选”复选框。 我想测试选择和删除两行,例如,也单击全选并将其删除。 因此,我需要在第一次测试中检查第二个和第三个复选框,在第二次测试中检查第一个复选框...

我找不到选择第n个元素的方法,我能找到的唯一方法是通过xpath选择,所以我尝试了这个但没有成功:

$I->checkOption("(//input[@type='checkbox'])[2]");

错误信息类似于 //html(//input[@type='checkbox'])[2] is invalid。 显然,Codeception正在修改选择器,因此我尝试使用WebDriverBy类,但是我找不到将其作为参数传递的方法... 有任何想法吗? 附注:这不是实际情况,而是一个简单的示例来描述问题...

你尝试过移除括号吗?"//input[@type='checkbox'][2]" - Algiz
@Algiz 这不行,因为每个复选框都在一个 td 元素内。除非这些复选框是兄弟元素,否则我需要括号... - madpoet
据我所了解的XPATH(可能非常棘手),第一部分(“//input[@type ='checkbox']”)将构建节点列表,而第二部分(“[2]”)将获取列表中的第二个元素。它没有兄弟关系的概念。你给出的答案与我的相同。“//input”是相对XPATH,而“/descendant”是绝对XPATH,将查找所有节点。 - Algiz
是的,这确实有点棘手 :) 这个答案对此有一个很好的解释... - madpoet
2个回答

3
我从这个答案中找到了一种方法。具体方法如下:
$I->checkOption("/descendant::input[@type='checkbox'][2]");

1

这个在我的环境下可以工作,你也可以使用这个。

$I->checkOption('[name="published"]');

至于问题:

我们可以通过以下方式找到第n个元素:

  1. $I->click("table#races-table tbody tr:first-child td:last-child button")- 表格(如果您知道第一个子元素和最后一个子元素)

  2. $I->click('#side-menu li:nth-child(2)');- (如果您有侧边菜单并需要从子菜单中选择项目)

  3. $I->selectOption('.radio-tab:nth-child(1)', '1'); -- (如果表单中有多个单选按钮,则选择单选按钮)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接