我已经为一个for应用程序设置了这个Spring Tomcat。
我正在用selenium进行测试,我也找不到一个元素的名字;
1)我在等待页面的加载,
2)在我的.jsp视图页面中清楚地设置了名称。
此外,测试的主要目标是输入用户名和密码,在控制器中页面被重定向到下面的.jsp文件。然后页面获得加载的时间。
我注意到只有在这个错误的情况下,它才会跳过等待时间。
截图:http://postimg.org/image/aka5az82l/
错误:
org.openqa.selenium.NoSuchElementException: Unable to locate element with name: newusernameJSP页面:
<%@ 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);
}发布于 2016-01-13 10:23:09
由于我无法更改测试类(这是测试驱动开发的一项任务)。
我已经将输入字段从Spring输入更改为标准HTML输入。此解决方案工作正常,新用户将被存储。
我承认,仅仅改变测试是一种更容易、更干净的方法。
总之,下面是.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">
//changed to basic html inputfields
<input name="newusername" type="text" />
<input name="newpassword" type="password" />
<input type="submit" value="ADD USER" name="Add user">
</spring:form>
</body>
</html>发布于 2016-01-12 21:37:56
这可能足够灵活,以帮助揭示问题,因为它将适用于名称username和newusername。
WebElement element = driver.findElement(By.xpath(".//input[contains(@name, 'username')]");发布于 2016-01-12 21:23:47
这个问题是由这样一个事实引起的:在本例中,path变量控制HTML的最终名称,因此基于这一行:
<spring:input type="text" name="newusername" path="username"/>以下Selenium表达式:
element = driver.findElement(By.name("newusername"));应改为:
element = driver.findElement(By.name("username"));https://stackoverflow.com/questions/34753406
复制相似问题