Java 如何处理使用Web驱动程序动态生成值的表?
问题:如何从表列中找到值,以及如何根据该值选择相邻复选框 说明:该表由8列组成。第一列名称为“选择”,由复选框组成。最后一列的列名是“金额” 我们有数量。我希望web驱动程序在相邻的amount列包含值(比如3380)时单击复选框。 表示若“金额”部分中存在特定金额,则单击与该金额行关联的复选框 注:这些值本质上是动态的 HTML代码:Java 如何处理使用Web驱动程序动态生成值的表?,java,selenium-webdriver,junit,webdriver,Java,Selenium Webdriver,Junit,Webdriver,问题:如何从表列中找到值,以及如何根据该值选择相邻复选框 说明:该表由8列组成。第一列名称为“选择”,由复选框组成。最后一列的列名是“金额” 我们有数量。我希望web驱动程序在相邻的amount列包含值(比如3380)时单击复选框。 表示若“金额”部分中存在特定金额,则单击与该金额行关联的复选框 注:这些值本质上是动态的 HTML代码: 在我的头顶上,我会尝试 topElement = driver.findElement(By.xpath("(//table[@width=760][@cell
在我的头顶上,我会尝试
topElement = driver.findElement(By.xpath("(//table[@width=760][@cellspacing=1])[2]/tbody"));
List<WebElement> potentialElements = topElement.findElements(By.xpath("//*[contains(@value,'100000')]"));
if (potentialElements.size() > 0) {
//You have caught your fish
}
让Selenium搜索一次比在循环中查找每个元素并测试其值要高效得多
编辑
问题陈述:如果在关联的“金额”列中有一个等于100000的“金额”,我想从“选择”列中选中复选框
public void checkPaymentItemsEqualTo100k() throws InterruptedException{
topElement = driver.findElement(By.xpath("(//table[@width=760][@cellspacing=1])[2]/tbody"));
List<WebElement> potentialElements = topElement.findElements(By.xpath("//*[contains(@value,'100000')]"));
if (potentialElements.size() > 0) {
for (WebElement x: potentialElements) {
WebElement grandParent = x.findElement(By.xpath("/../../..");
WebElement wElement = grandParent.findElement(By.xpath("/td[1]/div/input[@name='bulk_CHKpayment'])[1]"));
if(wElement.getAttribute("onclick") == null){
JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript ("arguments[0].click();" , wElement);
Log.info("Payment Item equal to 100k Amount is available");
sleepResponsibly(2000);
}
}
}
}
public void sleepResponsibly(int timeMillisecond){
try{
Thread.sleep(timeMillisecond);
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
throw new RuntimeException(ex);
}
}
警告:我还没有对此进行测试。使用xpath更容易。 实际的Xpath可能会有所不同,因为我没有要测试的更改。但是,您可以找到与文本匹配的TD,然后转到父元素,即ROW,然后是TD,然后是input
public void selectValue(String value){
String xpath = "//td[contains(text(),'"+value+"')]/../td[1]/input";
WebElement checkbox = driver.findElement(By.xpath(xpath));
checkbox.click();
}
我找不到任何值为100000的复选框,您能否只共享这些复选框的代码以及围绕该复选框的几行2-5行,并删除不必要的代码?请访问:我只想在金额列的值等于100000Akki时选择复选框问题中没有不必要的HTML代码,我要求您删除该选项,以便人们能够更好地理解您的问题,并且您有更高的机会获得答案。您好,Gaurang,需要添加代码。它看起来很大,因为整个数据都在表结构中,供您回答。你能给我写一个完整的函数吗?我有点困惑。如果你必须睡觉,那就负责任地睡觉。祖父母在这里做什么?我用了上面的方法,但它并没有做它应该做的事情。但是迈克,你很接近。
public void selectValue(String value){
String xpath = "//td[contains(text(),'"+value+"')]/../td[1]/input";
WebElement checkbox = driver.findElement(By.xpath(xpath));
checkbox.click();
}