Как получить доступ к динамическому элементу с селеном - PullRequest
1 голос
/ 30 октября 2019

Я выполняю функциональное тестирование на угловом приложении.

Моя текущая задача - заполнить данные на странице, отправить информацию, а затем проверить, что результаты.

После отправкипри нажатии кнопки на страницу добавляется новый элемент 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;
        }

}



Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...