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