Java 如何处理使用Web驱动程序动态生成值的表?

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

问题:如何从表列中找到值,以及如何根据该值选择相邻复选框

说明:该表由8列组成。第一列名称为“选择”,由复选框组成。最后一列的列名是“金额” 我们有数量。我希望web驱动程序在相邻的amount列包含值(比如3380)时单击复选框。 表示若“金额”部分中存在特定金额,则单击与该金额行关联的复选框

注:这些值本质上是动态的

HTML代码:


在我的头顶上,我会尝试

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();

}