首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >硒NoSuchElementException

硒NoSuchElementException
EN

Stack Overflow用户
提问于 2016-01-12 20:43:14
回答 4查看 493关注 0票数 1

我已经为一个for应用程序设置了这个Spring Tomcat。

我正在用selenium进行测试,我也找不到一个元素的名字;

1)我在等待页面的加载,

2)在我的.jsp视图页面中清楚地设置了名称。

此外,测试的主要目标是输入用户名和密码,在控制器中页面被重定向到下面的.jsp文件。然后页面获得加载的时间。

我注意到只有在这个错误的情况下,它才会跳过等待时间。

截图:http://postimg.org/image/aka5az82l/

错误:

代码语言:javascript
复制
org.openqa.selenium.NoSuchElementException: Unable to locate element with name: newusername

JSP页面:

代码语言:javascript
复制
<%@ 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>

试题班:

代码语言:javascript
复制
 @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);
    }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-01-13 10:23:09

由于我无法更改测试类(这是测试驱动开发的一项任务)。

我已经将输入字段从Spring输入更改为标准HTML输入。此解决方案工作正常,新用户将被存储。

我承认,仅仅改变测试是一种更容易、更干净的方法。

总之,下面是.jsp代码:

代码语言:javascript
复制
<%@ 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>
票数 0
EN

Stack Overflow用户

发布于 2016-01-12 21:37:56

这可能足够灵活,以帮助揭示问题,因为它将适用于名称usernamenewusername

代码语言:javascript
复制
WebElement element = driver.findElement(By.xpath(".//input[contains(@name, 'username')]");
票数 2
EN

Stack Overflow用户

发布于 2016-01-12 21:23:47

这个问题是由这样一个事实引起的:在本例中,path变量控制HTML的最终名称,因此基于这一行:

代码语言:javascript
复制
<spring:input type="text" name="newusername" path="username"/>

以下Selenium表达式:

代码语言:javascript
复制
element = driver.findElement(By.name("newusername"));

应改为:

代码语言:javascript
复制
element = driver.findElement(By.name("username"));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34753406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档