gpt4 book ai didi

java - Selenium 网络驱动程序 : finding checkbox based on multiple row values

转载 作者:行者123 更新时间:2023-12-01 10:09:13 25 4
gpt4 key购买 nike

我浏览了这个网站,但找不到解决我的问题的方法,并且想知道在 Selenium 方面有更多经验的人是否可以帮助我。对于这么长的帖子表示歉意,但我想确保我正确地解释了事情。

我正在使用Java。我通常使用 Rational Function Tester (Java),但我想看看是否可以重写一些测试的代码,看看转换起来有多容易。

我有一个 11 列 4 行的表(但也可能是 20 或 50 行,在测试过程中会有所波动)。我可以读取表格及其内容来找到我想要的行。我比较前 10 个单元格值中的每一个,如果它们全部匹配,我想单击第 11 列中的复选框。否则,继续到下一行。

该函数可以正常工作,从每个单元格中检索值。但是,当我尝试单击该复选框时,它始终选择第一行上的复选框。当我检查属性时,我可以看到所有复选框都具有相同的“名称”但具有不同的值(例如 1330361、1330363、1330359 等)。有趣的是,如果我搜索该行中的所有复选框,它会报告其中的 4 个(在整个表中找到的数字,而不是在该行中找到的数字)。

我可能犯了一个非常基本的错误,但我不知道它是什么。

我使用以下代码在表中进行搜索。该函数接收表行,此时,我只是报告单元格值,然后尝试单击该行中的复选框。这是一种调试功能。我不确定发布大量代码是否合适,因此我将只放置其简短版本,并尝试单击表中的每个复选框。

// Passing a specific table row to the function:
List<WebElement> columns=myRow.findElements(By.tagName("td"));
for (int iLoop = 0;iLoop < columns.size();iLoop++)
{
System.out.println("Column " + iLoop + " : '" + columns.get(iLoop).getText().toString() + "'");
// code to compare actual and expected values and setting of a boolean variable.

if (iLoop == 10 && recordMatch)
{
tCheckbox = myRow.findElement(By.xpath("//input[@type='checkbox']"));
System.out.println("Value is :" + tCheckbox.getAttribute("value").toString());
tCheckbox.click();
}

最佳答案

获取复选框的 XPath 将整个页面作为范围。我会在前面添加一个点以获得相对于该元素的范围:

// Passing a specific table row to the function:
List<WebElement> columns=myRow.findElements(By.tagName("td"));
for (int iLoop = 0;iLoop < columns.size();iLoop++)
{
System.out.println("Column " + iLoop + " : '" + columns.get(iLoop).getText().toString() + "'");
// code to compare actual and expected values and setting of a boolean variable.

if (iLoop == 10 && recordMatch)
{
tCheckbox = myRow.findElement(By.xpath(".//input[@type='checkbox']"));
System.out.println("Value is :" + tCheckbox.getAttribute("value").toString());
tCheckbox.click();
}
}

但更好的方法是在迭代列之前收集所有复选框:

// Passing a specific table row to the function:
List<WebElement> columns=myRow.findElements(By.xpath("//td[.//input[@type='checkbox']]"));
List<WebElement> checkboxes=myRow.findElements(By.xpath("//td//input[@type='checkbox']"));
for (int iLoop = 0;iLoop < columns.size();iLoop++)
{
System.out.println("Column " + iLoop + " : '" + columns.get(iLoop).getText().toString() + "'");
// code to compare actual and expected values and setting of a boolean variable.

if (iLoop == 10 && recordMatch)
{
tCheckbox = checkboxes.get(iLoop);
System.out.println("Value is :" + tCheckbox.getAttribute("value").toString());
tCheckbox.click();
}
}

关于java - Selenium 网络驱动程序 : finding checkbox based on multiple row values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36253028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com