首页 > 解决方案 > 根据答案,某些字段仍处于隐藏状态的调查

问题描述

我正在尝试使调查自动化。它有是和没有问题。根据答案,有些问题仍然隐藏。

这是NO按钮

                <label class="btn btn-primary ng-pristine ng-untouched ng-empty ng-valid ng-valid-required" ng-model="question.answer" ng-required="question.isOptional == false" uib-btn-radio="false" ng-change="clearIsValid(question);ifHasDependency(question,'BOOLEAN',$index);">No</label>
            </div>"

我试过这个:

for (int i = 17; i <= 100; i++) {

        for(int i=1;i<=200;i++ ){
            Thread.sleep(1000);
            if (driver.findElement(By.xpath("//*[@id=\"ngdialog2\"]/div[2]/span/wizard/div/div[4]/div/div/wizard-step["+i+"]/ng-form/ng-transclude/div[2]/div/div/label[1]")).isDisplayed()){

                driver.findElement(By.xpath("//*[@id=\"ngdialog2\"]/div[2]/span/wizard/div/div[4]/div/div/wizard-step["+i+"]/ng-form/ng-transclude/div[2]/div/div/label[1]")).click();
            }else{
                System.out.println("Question number " + i + " is missing.");
            }
        }

结果是:

org.openqa.selenium.ElementNotVisibleException: element not visible

请帮助:)谢谢

标签: javaseleniumselenium-webdrivercss-selectorsui-automation

解决方案


你可以试试这个:

for (int i = 17; i <= 100; i++) {
    for(int i = 1; i <= 200; i++){
        Thread.sleep(1000);
        // locate element
        WebElement element = driver.findElement(By.xpath("//*[@id=\"ngdialog2\"]/div[2]/span/wizard/div/div[4]/div/div/wizard-step["+i+"]/ng-form/ng-transclude/div[2]/div/div/label[1]"));
        try {
            // wait until element will be clickable
            new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(element));
            element.click(); // click on element
        }catch (Exception e){
            System.out.println("Question number " + i + " is missing.");
        }
    }
}

注意:你必须做一些导入:

import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

PS:作为源代码elementToBeClickable()告诉:

  public static ExpectedCondition<WebElement> elementToBeClickable(final WebElement element) {
    return new ExpectedCondition() {
      public ExpectedCondition<WebElement> visibilityOfElement = ExpectedConditions.visibilityOf(element);

      public WebElement apply(WebDriver driver) {
        WebElement elementx = (WebElement)this.visibilityOfElement.apply(driver);

        try {
          return elementx != null && elementx.isEnabled()?elementx:null;
        } catch (StaleElementReferenceException var4) {
          return null;
        }
      }

      public String toString() {
        return "element to be clickable: " + element;
      }
    };
  }

该元素将被证明可见性以及是否启用了元素。换句话说,如果元素准备好接收点击它。


推荐阅读