使用Selenium Web Driver时无法找到提交

时间:2014-02-24 12:09:20

标签: java selenium struts2 junit

我正在尝试在我的一个struts2应用程序中为登录表单实现selenium测试。登录表单有2个textfield(用户名和密码)和一个提交按钮,如下所示

<tr>
<td><s:submit value="Login" /></td>
</tr>

硒测试类如下

package home_page;

import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;

public class OpenURL {

@Test
public void openSoftwareTesting(){

    WebDriver _driver = new FirefoxDriver();
    _driver.get("http://trackit.zensar.com/TrackIt/"); 

    WebElement userName= _driver.findElement(By.name("userName"));
    WebElement password= _driver.findElement(By.name("password"));
    //WebElement submit= _driver.findElement(By.name("submit"));
    Actions builder = new Actions(_driver);
    Actions seriesOfActions = builder.moveToElement(userName).click().sendKeys(userName, "sm38553");
    seriesOfActions.perform();

    Actions action1 = builder.moveToElement(password).click().sendKeys(password, "Zensar#123");
    action1.perform();

   // _driver.findElement(By.name("submit")).click();


   _driver.findElement(By.id("submit")).click();


}

}

硒测试失败,并显示以下消息

org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"id","selector":"Login"}

请告诉我需要做什么。

由于

修改

我通过提供id和名称来做你的方式,但是无法得到结果。它抛出相同的错误。而且,我知道上面的代码是错误的(当没有提供选择器时),但我需要知道什么是正确的方法。请看我的代码如下     包home_page;

import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;

public class OpenURL {

@Test
public void openSoftwareTesting(){

    WebDriver _driver = new FirefoxDriver();
    _driver.get("http://trackit.zensar.com/TrackIt/"); 

    WebElement userName= _driver.findElement(By.name("userName"));
    WebElement password= _driver.findElement(By.name("password"));
    //WebElement submit= _driver.findElement(By.name("submit"));
    Actions builder = new Actions(_driver);
    Actions seriesOfActions = builder.moveToElement(userName).click().sendKeys(userName, "sm38553");
    seriesOfActions.perform();

    Actions action1 = builder.moveToElement(password).click().sendKeys(password, "Zensar#123");
    action1.perform();

   // _driver.findElement(By.name("submit")).click();


   _driver.findElement(By.id("submit")).click();


}

}

JSP代码

    <tr>
        <td><s:textfield name="userName" label="User Name" /></td>
    </tr>
    <tr>
        <td><s:password name="password" label="Password" /></td>
    </tr>
    <tr>
        <td><s:submit id="submit" value="Login" /></td>
    </tr>

硒错误

org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"id","selector":"submit"}

3 个答案:

答案 0 :(得分:1)

<s:submit value="Login" />

根据您使用的Struts2主题,

会在HTML等

中生成

<input type="submit" value="Login" id="someGeneratedId" />

要使其有效,只需给它一个ID:

<s:submit value="Login" id="submit" />

<子> 注意:您也可以使用name属性,就像在注释代码中一样,但这也会将按钮的值发布到操作中,这通常是不受欢迎的(例如,除非您需要区分按下了哪个按钮)在具有多个提交按钮的表单中)。
由于ID更干净,所以就这样。

答案 1 :(得分:0)

您可以使用以下脚本:

driver.findElement(By.xpath( “/ HTML /体/ DIV / DIV / DIV [2] /形式/表[2] / tbody的/ TR / TD /表/ tbody的/ TR [6]”)) .submit();

答案 2 :(得分:0)

如果您使用FireFox作为浏览器安装Selenium IDE插件http://docs.seleniumhq.org/docs/02_selenium_ide.jsp,那么您可以手动逐步完成该过程以查看Selenium如何识别您的登录按钮。