Java 如何使用selenium访问动态元素

Java 如何使用selenium访问动态元素,java,angular,selenium-webdriver,Java,Angular,Selenium Webdriver,我正在对一个角度应用程序进行功能测试 我当前的任务是在页面上填写数据,提交信息,然后验证结果 单击“提交”按钮后,页面上会添加一个新的div,该div可能会显示以下内容之一(例如:已保存的数据、某个字段中的错误、正在保存的数据已存在于系统中的错误等) 我的问题目前是等待该div出现,然后再进入下一步,因为这是我的测试失败的地方 根据div包含的消息,将采取下一步的某个步骤,因此等待某些文本出现将不起作用,因为这可能会有所不同 我不想使用隐式等待,而是严格地使用显式等待,但到目前为止我尝试的一切都

我正在对一个角度应用程序进行功能测试

我当前的任务是在页面上填写数据,提交信息,然后验证结果

单击“提交”按钮后,页面上会添加一个新的div,该div可能会显示以下内容之一(例如:已保存的数据、某个字段中的错误、正在保存的数据已存在于系统中的错误等)

我的问题目前是等待该div出现,然后再进入下一步,因为这是我的测试失败的地方

根据div包含的消息,将采取下一步的某个步骤,因此等待某些文本出现将不起作用,因为这可能会有所不同

我不想使用隐式等待,而是严格地使用显式等待,但到目前为止我尝试的一切都不起作用

我面临着这个错误:

org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element:
我试过:

  • 等待它可见
  • 等待它被点击(即使我不需要点击 但值得一试)
  • 等待它出现
  • 流畅的等待
在这一点上,我不知道如何等到这个元素出现才能访问它

我看到元素是基于ng reflect if添加的,但我甚至不确定这是否有区别

HTML代码

<app-notification-box _ngcontent-c3="" _nghost-c4=""><!--bindings={
  "ng-reflect-ng-if": "true"
}--><div _ngcontent-c4="" class="row py-2 pl-2 pr-1 m-2 light-green-row" ng-reflect-klass="row py-2 pl-2 pr-1 m-2" ng-reflect-ng-class="[object Object]">  
  <div _ngcontent-c4="" class="col-1 m-0 py-0 pl-0 pr-2 tx-align-r max3p">
      <img _ngcontent-c4="" class="ic16" src="some source" hidden="">
      <img _ngcontent-c4="" class="ic16" src="some source">        
  </div>
  <!--bindings={
  "ng-reflect-ng-if": "true",
  "ng-reflect-ng-if-else": "[object Object]"
}--><div _ngcontent-c4="" class="col m-0 p-0 tx-align-l">
      successfully saved 
  </div>
  <!---->
</div>
<!--bindings={
  "ng-reflect-ng-if": "false"
}-->
<!--bindings={
  "ng-reflect-ng-if": "false"
}-->
<!--bindings={
  "ng-reflect-ng-for-of": "[object Object],[object Object"
}--><div _ngcontent-c4="">
  <!--bindings={
  "ng-reflect-ng-if": "false"
}-->
</div><div _ngcontent-c4="">
  <!--bindings={
  "ng-reflect-ng-if": "false"
}-->
</div>
</app-notification-box>

您可以发布代码片段和HTML片段吗?您确认所需元素不在IFRAME中吗?@JeffC是的,它不是IFRAME。然后我们需要查看您正在使用的代码以及您正在引用的相关HTML,或者我们只是猜测。请将这两个元素都添加到您的问题中,并正确设置格式。@davidbak我已经更新了问题。您可以发布代码片段和HTML片段吗?您是否确认所需元素不在IFRAME中?@JeffC yes,它不是一个iframe,然后我们需要看到您正在使用的代码以及您正在引用的相关HTML,或者我们只是猜测。请将这两个问题都添加到您的问题中,并正确设置格式。@davidbak我已经更新了问题
public String checkExpectedResult(String expectedResultValue){
   //wait.until(ExpectedConditions.visibilityOf(expectedResult);
  //wait.until(ExpectedConditions.elementToBeClickable(expectedResult));
  //wait.until(ExpectedConditions.presenceOfElementLocated(expectedResult));

   Boolean actualResult = expectedResult.getText().equalsIgnoreCase(expectedResultValue); 
        if (actualResult) {
            clearButton.click();
            setAccount();
            checkNextExpectedResult();
            UtilityFunctions.generateScreenShot(driver, "Success");
            return "success";
        } else {
            String results = expectedResult.getText();
            UtilityFunctions.generateScreenShot(driver, expectedResult.getText());
            System.out.println("Actual Result: " + expectedResult.getText());
            refreshBrowser();
            return results;
        }

}