Selenium NoSuchElementException

时间:2016-01-12 20:43:15

标签: java spring maven jsp selenium

我有这个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>

4 个答案:

答案 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>