У меня есть эта Spring - Maven - настройка Tomcat для веб-приложения.Selenium NoSuchElementException
Я тестирую селен, и я не могу найти элемент по имени, altough;
1) Я жду загрузится страница,
2) имя явно устанавливается в моей странице просмотра .jsp.
Кроме того, основная цель теста - ввести имя пользователя и пароль, в контроллере страница будет перенаправлена на файл .jsp внизу. Затем страница получает время для загрузки.
Я заметил, что только с этой ошибкой он пропускает время ожидания.
Скриншот: http://postimg.org/image/aka5az82l/
Ошибка:
org.openqa.selenium.NoSuchElementException: Unable to locate element with name: newusername
JSP-страница:
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Favorites: root</title>
</head>
<body>
<p>Add a User</p>
<spring:form action="/tdd/addUser" method="post" modelAttribute="user">
//Element name here
<spring:input type="text" name="newusername" path="username"/>
<spring:input type="password" name="newpassword" path="password"/>
<input type="submit" value="ADD USER" name="Add user">
</spring:form>
</body>
</html>
тест:
@Test
public void testHomeScreenRoot() {
WebDriver driver = new HtmlUnitDriver();
driver.get("http://127.0.0.1:9999/tdd");
WebElement element = driver.findElement(By.name("username"));
element.sendKeys("root");
element = driver.findElement(By.name("password"));
element.sendKeys("rootpasswd");
element.submit();
//Waiting here
(new WebDriverWait(driver, 10)).until((WebDriver d) -> d.getTitle().equals("Favorites: root"));
//Error here
element = driver.findElement(By.name("newusername"));
String tagName = element.getTagName();
assertEquals("input", tagName);
element = driver.findElement(By.name("newpassword"));
tagName = element.getTagName();
assertEquals("input", tagName);
element = driver.findElement(By.name("Add user"));
tagName = element.getTagName();
assertEquals("input", tagName);
String type = element.getAttribute("type");
assertEquals("submit", type);
}
Вы можете убедиться, что поле на самом деле называется 'newusername' путем загрузки страницы в браузере и проверка его с помощью консоли разработчика? –
Это не так, но почему? @GergelyBacso [ссылка] (http: // postimg.org/image/yn0o9sge3 /) – Sytham
Selenium получает только ваш окончательный HTML-контент, не видит написанный вами код Spring. Если поле HTML называется 'username' (исходящее из переменной' path', которое я предполагаю), тогда вам нужно указать * this * для Selenium, а не 'newusername'. –