WebElement.click()不提交表单

时间:2012-01-18 09:28:41

标签: java-ee selenium spring-security selenium-webdriver

我正在尝试对春季安全进行硒测试,我跟着许多例子没有运气,我总是以登录失败告终:

public class LoginTest {

    private WebDriver driver;
    private String baseUrl;

    @Before
    public void setUp() throws Exception {
        driver = new FirefoxDriver();
        baseUrl = "http://localhost:8080";
    }

    @Test
    public void testLoginClass() throws Exception {
        driver.get(baseUrl + "/MyAPP/login");

        final WebElement usernameField = driver.findElement(By
                .id("j_username"));
        usernameField.sendKeys("1");

        final WebElement passwordField = driver.findElement(By
                .id("j_password"));
        passwordField.sendKeys("123456");

        passwordField.submit();

        System.out.println("##################### URL: "
                + driver.getCurrentUrl());
        Assert.assertNotNull(driver.findElement(By.className("welcomeHome")));
    }

    @After
    public void tearDown() throws Exception {
        driver.close();
    }

}

问题:我确定输入的用户名和密码匹配,我可以在loginFailureHandler中打印它们,我发现它们是正确的(在编码之前,它们是否应该在loginFailure中编码?)

无论如何,我正在使用SHA编码:

<authentication-manager alias="authenticationManager">          
      <authentication-provider user-service-ref="userDetailsService">
         <password-encoder hash="sha"/>             
      </authentication-provider>   
    </authentication-manager> 

任何人都可以告诉我为什么我alwyas登录失败?

这是我的登录表单:

<form action="#{request.contextPath}/j_spring_security_check" method="post">

                        <h:inputText  id="j_username"  />
                        <h:inputSecret  id="j_password" />
                        <h:commandButton   id="loginBtn" />

 </form>

更新:点击按钮,登录成功,但不将用户转发到主页,他仍然在登录页面,driver.getCurrentUrl()将打印登录

WebElement loginBtn = driver.findElement(By
            .id("loginBtn"));
loginBtn.click();

UPDATE2 :我尝试在登录后将用户转发到主页,也没有运气,用户仍然在登录页面。

WebElement loginBtn = driver.findElement(By.id("loginBtn"));
        loginBtn.click();

        driver.get(baseUrl + "/MyAPP/home");

UPDATE3 :当我更换按钮时点击进入点击,它工作正常我不知道为什么

OLD

WebElement loginBtn = driver.findElement(By.id("loginBtn"));
loginBtn.click();

passwordField.sendKeys(Keys.ENTER);

2 个答案:

答案 0 :(得分:3)

您是否曾尝试点击按钮而不是passwordfield.submit()

WebElement loginBtn = driver.findElement(By
            .id("loginBtn"));
loginBtn.click();

答案 1 :(得分:1)

按ID

替换名称

使用以下片段:

final WebElement usernameField = driver.findElement(By.id("j_username"));         usernameField.sendKeys("1");
final WebElement passwordField = driver.findElement(By.id("j_password"));         passwordField.sendKeys("123456");