我有这个Spring - Maven - 用于Web应用程序的Tomcat设置。
我正在测试硒,我无法按名称找到元素,尽管如此;
1)我正在等待页面加载,
2)我的.jsp视图页面中清楚地设置了名称。
此外,测试的主要目标是输入用户名和密码,在控制器中页面被重定向到下面的.jsp文件。然后页面有时间加载。
我注意到只有这个错误,它才会跳过等待时间。
截图: http://postimg.org/image/aka5az82l/
错误:
>python manage.py migrate
....
ValueError: Unhandled pending operations for models:
old_app.newcar (referred to by fields: new_app.Tires.car)
JSP页面:
org.openqa.selenium.NoSuchElementException: Unable to locate element with name: newusername
测试类:
<%@ 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>
答案 0 :(得分:2)
这可能足够灵活,可以帮助揭示问题,因为它适用于名称username
以及newusername
:
WebElement element = driver.findElement(By.xpath(".//input[contains(@name, 'username')]");
答案 1 :(得分:1)
此问题是由以下事实引起的:在此示例中,path
变量控制HTML标记的最终名称,因此基于以下行:
<spring:input type="text" name="newusername" path="username"/>
以下Selenium表达式:
element = driver.findElement(By.name("newusername"));
应更改为:
element = driver.findElement(By.name("username"));
答案 2 :(得分:1)
也许selenium会丢失引用,因为路径,我认为如果你在你的元素中添加一个Id并将代码更改为Id,那么这个错误就不会发生..
答案 3 :(得分:0)
由于我无法更改测试类(这是测试驱动开发的一项任务)。
我已将输入字段从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>