Я написал автоматизированные тесты с помощью JUnit, Selenium Webdriver (v. 3.141.59) и Chromedriver (v. 2.45).
Сначала я написал тест для входа в систему:
[...]
void loginTest() {
driver().findElement(By.id("login-button")).click();
driver().findElement(By.id("name")).sendKeys("mail@xx.com");
driver().findElement(By.id("password")).sendKeys("password");
driver().findElement(By.id("send")).click();
assertTrue(driver().findElement(By.id("logged-in-msg")).isDisplayed());
}
Все работало нормально, все хорошо, тест зеленый.
Затем я получил несколько более сложных и длинных идентификаторов и путей, которые мне пришлось использовать, поэтому я решил сделать тесты короткими и приятными и поместить все свои локаторы в отдельный класс, например:
public class LocatorsList {
public static final String
SIGN_IN_BUTTON = "login-button",
LOG_IN_USERNAME = "name",
LOG_IN_PASSWORD = "password",
LOG_IN_BUTTON = "send",
SUCCESS_MSG = "logged-in-msg";
}
И мой тест:
[...]
void loginTest() {
driver().findElement(By.id(SIGN_IN_BUTTON)).click();
driver().findElement(By.id(LOG_IN_USERNAME)).sendKeys("mail@xx.com");
driver().findElement(By.id(LOG_IN_PASSWORD)).sendKeys("password");
driver().findElement(By.id(LOG_IN_BUTTON)).click();
assertTrue(driver().findElement(By.id(SUCCESS_MSG)).isDisplayed());
}
Тогда он перестал работать. Webdriver отправляет ошибки:
org.openqa.selenium.NoSuchElementException: no such element:
Unable to locate element: {"method":"id","selector":"name"}
Пока я смотрел, как проходит мой тест, этот элемент был прямо на странице, веб-драйвер даже щелкал по нему, как если бы он хотел заполнить поле ... но это не так. Говорит «невозможно найти элемент».
Я пытался изменить версии хромедрайвера и селена, но это не помогло.