org.openqa.selenium.TimeoutException: ожидаемое условие не выполнено: ожидание видимости элемента, расположенного By.xpath: - PullRequest
1 голос
/ 12 марта 2019

Я пытаюсь отправить текст с опцией sendkeys().Это мой метод в моем объекте страницы класса:

public void setEntityName() {
    internalWait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"entity_name\"]")));
    entityName.clear();
    entityName.sendKeys("TEST");
}

HTML:

 <input id="entity_name" name="entity_name" type="text" ng-model="entityData.name" ng-disabled="false" placeholder="Type Enity Name" data-maxlength="20" data-smart-validate-input="" data-required="" class="ng-pristine ng-invalid ng-invalid-required ng-valid-maxlength ng-touched">

В тесте показана ошибка

org.openqa.selenium.TimeoutException: Expected condition failed: waiting for visibility of element located by By.xpath: //*[@id="entity_name"] 

Может кто-нибудь помочь мне с этой ошибкой.

1 Ответ

2 голосов
/ 13 марта 2019

Требуемый элемент является Angular элементом, поэтому для вызова sendKeys() вместо visibilityOfElementLocated() вам нужно вызвать WebDriverWait для elementToBeClickable(), и вы можете использовать любой изследующие решения:

  • Использование cssSelector:

    public void setEntityName() {
        WebElement entityName = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("input.ng-pristine.ng-invalid.ng-invalid-required.ng-valid-maxlength.ng-touched#entity_name[ng-model='entityData.name']")));
        entityName.clear();
        entityName.sendKeys("TEST");
    }
    
  • Использование xpath:

    public void setEntityName() {
        WebElement entityName = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@class='ng-pristine ng-invalid ng-invalid-required ng-valid-maxlength ng-touched' and @id='entity_name'][@ng-model='entityData.name']")));
        entityName.clear();
        entityName.sendKeys("TEST");
    }
    
...