如何使用junit将数据从二维参数数组传递到selenium rc中的type()函数

时间:2016-02-01 10:18:20

标签: java selenium junit selenium-rc

我尝试以不同的组合传递用户名和密码(有效有效,无效无效,无效有效,无效无效)并将它们分配给字符串变量userName和password并使用参数化类

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

import com.thoughtworks.selenium.DefaultSelenium;
import com.thoughtworks.selenium.Selenium;

@SuppressWarnings("deprecation")
@RunWith(Parameterized.class)
public class FunctionalTestCaseActiTimeParameterization {

    Selenium selenium = new DefaultSelenium("localhost", 4444, "*firefox","http://localhost/login.do");

    String userName;
    String password;

    public FunctionalTestCaseActiTimeParameterization(String userName, String password){
        this.userName = userName;
        this.password = password;
    }

    @Parameters
    public static Object[][] getData(){
        return new Object[][]{
            {"admin","manager"},
            {"admin","test"},
            {"test","manager"},
            {"test","test"}
        };
    }

    @Before
    public void openApplication(){
        selenium.start();// start interaction with proxy server
        selenium.open("/");// to open application
        selenium.windowMaximize();// to maximize the window
        selenium.windowFocus();// to focus on current window
    }

    @After
    public void closeApplicaton() throws InterruptedException{
        Thread.sleep(5000);
        selenium.close();// close window
        selenium.stop();// stop interaction with server
    }

    @Test
    public void mainTestMethodLoginLogout() throws InterruptedException{
        selenium.type("//input[@id='username']", userName);
        selenium.type("//input[@type='password']", password);
        Thread.sleep(3000);
    }
}

并且我没有收到任何错误或警告(我已经使用参数化但不在函数内部,因此对如何在类型函数中使用它感到有些困惑, 运行时代码失败(没有错误)。

如果有人能指出我正确的方向,我会很高兴。

2 个答案:

答案 0 :(得分:0)

我认为二维数组方法是一个错误,因为再往前看,您需要将{username:password}组合与预期输出相关联。

也许期望只需要一个布尔值(“OK”vs“Not OK”),在这种情况下你可以使用Comic Sans MS List<MyTestSpec>包含{username,password,wasOK} - 但是你可能还有其他需求,例如检查成功登录重定向到不同用户级别的配置文件页面,检查不同类型的登录失败。

您应该首先为每个方案设置一个单独的,不同的MyTestSpec,并使每个方案尽可能全面和详细。

只有在您的失败测试通过并且锁定了您的期望后,才会担心重构您的Selenium API逻辑(创建辅助函数等)。

注意,无论是使用Selenium的RC还是WebDriver API都是如此。

答案 1 :(得分:0)

我自己发现了这个问题。我发布的代码实际上是正确的,但它不接受参数,因为我在页面加载完全之前调用参数。 添加Thread.sleep(2000);解决了问题。 谢谢你们,无论谁尝试过......