java - 测试按钮是否被选择基于

标签 java selenium-webdriver webdriver

我需要找到一个按钮,该按钮可能会被选中,也可能不会被选中。

我首先找到按钮的xpath,检查其是否被选中,但在此检查中失败“无法定位元素:{“method”:“tag name”,“selector”:“input”}”

我的 boolean 行检查应该是什么?

  WebElement element =  driver.findElement(By.xpath("//i[contains(@class,'i-icon--plus-18-movie')]"));

    boolean isChecked = element.findElement(By.tagName("input")).isSelected();
        if(isChecked){
            System.out.println("is checked");
                 element.click();
        }  


<age-question-button class="ng-scope ng-isolate-scope" state="qc.answer[question.name]" icon="plus-18-movie" active-text="The Customer is over 18" inactive-text="The Customer is NOT over 18" ng-repeat="question in qc.questionsList track by question.name" audit="cc.utils.audit(qc.answer[question.name] ? question.auditInactive : question.auditActive)">
<label class="c-option u-p-0 u-ml-md u-pull-left" tooltip-append-to-body="true" uib-tooltip="The Customer is NOT over 18">
<input class="ng-untouched ng-valid ng-dirty ng-valid-parse" ng-model="state" ng-change="audit()" style="" type="checkbox">
<i class="c-option__button i-icon i-icon--plus-18-movie"></i>
</label>
</age-question-button>

最佳答案

请尽量避免同一路径中存在多个类。 您可以像下面这样使用

WebElement elem = driver.findElement(By.className("ng-isolate-scope"));
WebElement element =  elem.findElement(By.className("ng-valid-parse"));

boolean isChecked = element.findElement(By.tagName("input")).isSelected();
if(isChecked){
    System.out.println("is checked");
    element.click();
}        

如果您有多个具有相同名称的类,您可以使用该元素的列表和所需索引。

WebElement elem = driver.findElement(By.className("ng-isolate-scope"));
List<WebElement> element =  elem.findElements(By.className("ng-valid-parse"));

boolean isChecked = element.get(indexOfyourdesiredELement).findElement(By.tagName("input")).isSelected();
if(isChecked){
       System.out.println("is checked");
       element.get(indexOfyourdesiredELement).click();
}  

你也可以这样写

boolean isChecked =  element.findElement(By.cssSelector("input[type='checkbox']")).isSelected();

编辑:这是更新的解决方案。如果选中,它将单击该复选框。您可以自行反转逻辑。

WebElement element = driver.findElement(By.tagName("age-question-button"));
boolean isChecked =  element.findElement(By.cssSelector("input[type='checkbox']")).isSelected();
if(isChecked){
    System.out.println("is checked");
    element.click();
}  

如果存在多个年龄问题按钮问题,请按照此操作。

List<WebElement> element = driver.findElements(By.tagName("age-question-button"));

    for(int i = 0 ; i< element.size() ; i++){
        boolean isChecked =  element.get(i).findElement(By.cssSelector("input[type='checkbox']")).isSelected();
        if(isChecked){
              System.out.println("is checked and it will click on checkbox if it is checked");

               element.get(i).click();
        }  
    }

关于java - 测试按钮是否被选择基于,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47631427/

相关文章:

java - 如何关闭子窗口?在 Selenium WebDriver 中 - 通过使用FunctionalClass

iphone - iOS 6 WebDriver 编译

java - 在 Android Intent 的 putExtra 中传递 null 会导致编译时错误?

java - 为什么要在框架中添加额外的空间?

java - 为休息服务实现 JUnit 测试

c# - Selenium - 等到元素不可见

java - Selenium webdriver 启动边缘浏览器

selenium - WebDriver:如何自动输入屏蔽生日(//)字段

java - 对多个数组元素执行 JUnit 断言 - 当一个元素失败时如何处理?

JavaFX 显示使用 Controller 在场景生成器中创建的 View