Я выполняю функциональное тестирование на угловом приложении.
Моя текущая задача - заполнить данные на странице, отправить информацию, а затем проверить, что результаты.
После отправкипри нажатии кнопки на страницу добавляется новый элемент div, который может сказать любую из этих вещей (например: сохраненные данные, ошибка в определенном поле, ошибка, связанная с тем, что сохраняемые данные уже находятся в системе и т. д.)
Моя проблема в настоящее время ждет появления этого div, прежде чем перейти к следующему шагу, потому что именно здесь мой тест не пройден.
В зависимости от того, какое сообщение содержит div, будет сделан определенный следующий шаг, ожидающийпоявление некоторого текста не сработало бы, потому что оно может варьироваться.
Я хочу не использовать неявные ожидания и строго использовать явные, но все, что я до сих пор пробовал, не работает
Я сталкиваюсь с этой ошибкой:
org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element:
Я пытался:
- , ожидая, чтобы это было видимым
- , ожидая, чтобы это было кликабельным (наканунеИ хотя мне не нужно нажимать, но стоит выстрел)
- в ожидании его присутствия
- беглое ожидание
на данный момент у меня нет идейо том, как ждать, пока этот элемент будет присутствовать, чтобы получить к нему доступ.
Я вижу, что элемент добавляется на основе ng-refle-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>
Функция Доступ к элементу с xpath: "// [@id = \ "ui-main-content \"] окно уведомлений приложения [1] / div [1] / div [2] "*
WebElement называется Ожидаемый результат
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;
}
}