处理选择状态作为类值

时间:2016-01-20 11:09:31

标签: java webdriver

  

未选中Box

<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">
  

checkedBox

<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-app jQuery与JavaScript库非常相似,其中选择状态存储为类值的一部分....从而使得难以使用isSelected( )。尝试了所有可能的努力,但它的方法取消检查已经复选框或抛出错误。 我使用getAttribute()获取类并检查它是否包含定义文本,但正如您所看到的,该类具有预定义文本(tick-a)并在选中此框时更改为((tick-a)checked) 。这就是我遇到困难的重点。 将欣赏提供的帮助。还检查了相关主题但没有帮助。

2 个答案:

答案 0 :(得分:0)

我不太清楚你的意思,但是看看未经检查和检查过的代码片段,“已检查”类没有添加class="tick-a"。所以checkBoxClass.contains("tick-a checked")永远不会成真。

答案 1 :(得分:0)

  

快速更新......自己想出解决方案。在正确看了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) {

        }
    }