处理一个复选框,其中选择状态存储为类值的一部分



未选中的框

<input data-track-event="my_account" data-track-action="newsletter-unselect" data-track-data="Page[My Account]|<-vertical->|<-horizontal->|<-rel_vertical->|<-rel_horizontal->|Newsletters|Business - checkbox|Pos[3:8]|" type="checkbox" name="newsletters[]" id="f-newsletters-business" value="business" class="tick-a">

复选框

<input data-track-event="my_account" data-track-action="newsletter-unselect" data-track-data="Page[My Account]|<-vertical->|<-horizontal->|<-rel_vertical->|<-rel_horizontal->|Newsletters|Style - checkbox|Pos[5:8]|" type="checkbox" name="newsletters[]" id="f-newsletters-independent_woman" value="independent_woman" class="tick-a" checked="">

我的代码

public void checkboxIsSelected(By by, String text) {
    try {
        String checkBoxClass = driver.findElement(by).getAttribute("class");            
        if (checkBoxClass.contains("tick-a checked")) {
            log.log("CheckBox is already selected.... Move On.");                                           
        }
    } catch (Exception e) {
        log.log("CheckBox NOT checked... Pls Select to avail of: " + text);
        driver.findElement(by).click();
        log.log("CheckBox selected..... continue.");    
    }
}

请我需要检查复选框是否被选中。根据我所做的研究,我发现有一些常见的Web应用程序jQuery与JavaScript库非常相似,其中选择状态存储为类值的一部分。从而使使用 isSelected() 变得困难。已经尝试了所有可能的努力,但它要么该方法取消选中已经复选框,要么抛出错误。我使用 getAttribute() 来获取类并检查它是否包含定义文本,但如您所见,该类具有预定义的文本(tick-a),并在选中该框时更改为 ((tick-a) 选中)。这就是我遇到困难的重点。将不胜感激所提供的帮助。也检查了相关主题,但没有帮助。

我不太确定你在这里的意思,但查看你未经检查和检查的代码片段,没有添加"检查"类,class="tick-a".所以checkBoxClass.contains("tick-a checked")永远不会是真的。

只是一个快速更新....自己想出了解决方案。在正确查看了javascript之后,我发现我指向了错误的元素。下面的代码。

public void checkboxIsSelected(By by, String text) {
        try {
            if (!driver.findElement(by).isSelected()) {                 
                log.log("CheckBox NOT checked... Pls Select to avail of: " + text);
                JavascriptExecutor jse = (JavascriptExecutor)driver;
                jse.executeScript("arguments[0].click()", driver.findElement(by));
                log.log("checkBox clicked..... Move On.");
                Thread.sleep(3000);
                //driver.findElement(by).click();
            }else
            {
                log.log("CheckBox is ALREADY selected.... Move On.");                   
            }
        } catch (Exception e) {
        }
    }

坦克斯

最新更新