如何使用junit将数据从二维参数数组传递到selenium rc中的type()函数
how to pass data from a two dimentional parameter array to type() function in selenium rc using junit
我正在尝试以不同的组合(有效-有效、有效-无效、无效-有效、无效-无效)传递用户名和密码,并将它们分配给字符串变量 userName 和 password,并使用参数化 class.
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);
}
}
而且我没有收到任何错误或警告(我使用了参数化但没有在函数内部使用,所以对如何在类型函数中使用它感到有点困惑,
当 运行 代码失败(无错误)时。
如果有人能给我指出正确的方向,我会很高兴。
我认为二维数组方法是错误的,因为看得更远一点,您需要将 {username:password} 组合与预期输出相关联。
也许期望值只需要是一个布尔值("OK" vs "Not OK"),在这种情况下,您可以使用 List<MyTestSpec>
,其中 MyTestSpec
包含 {用户名, password, wasOK} - 但您可能还有其他需求,例如检查成功登录重定向到不同用户级别的个人资料页面,检查不同类型的登录失败。
您真的应该从为每个场景设置一个单独的、不同的 @Test
开始,并使每个场景都尽可能全面和详细。
担心重构您的 Selenium API 逻辑(创建辅助函数等)只有当您通过了失败的测试并且您已经锁定了您的期望时。
注意无论是使用Selenium的RC还是WebDriver都一样API.
我自己发现了问题。我发布的代码实际上是正确的,但它不接受参数,因为我在页面完全加载之前调用了参数。
添加 Thread.sleep(2000);
解决了问题。
谢谢你尝试过的人..
我正在尝试以不同的组合(有效-有效、有效-无效、无效-有效、无效-无效)传递用户名和密码,并将它们分配给字符串变量 userName 和 password,并使用参数化 class.
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);
}
}
而且我没有收到任何错误或警告(我使用了参数化但没有在函数内部使用,所以对如何在类型函数中使用它感到有点困惑, 当 运行 代码失败(无错误)时。
如果有人能给我指出正确的方向,我会很高兴。
我认为二维数组方法是错误的,因为看得更远一点,您需要将 {username:password} 组合与预期输出相关联。
也许期望值只需要是一个布尔值("OK" vs "Not OK"),在这种情况下,您可以使用 List<MyTestSpec>
,其中 MyTestSpec
包含 {用户名, password, wasOK} - 但您可能还有其他需求,例如检查成功登录重定向到不同用户级别的个人资料页面,检查不同类型的登录失败。
您真的应该从为每个场景设置一个单独的、不同的 @Test
开始,并使每个场景都尽可能全面和详细。
担心重构您的 Selenium API 逻辑(创建辅助函数等)只有当您通过了失败的测试并且您已经锁定了您的期望时。
注意无论是使用Selenium的RC还是WebDriver都一样API.
我自己发现了问题。我发布的代码实际上是正确的,但它不接受参数,因为我在页面完全加载之前调用了参数。
添加 Thread.sleep(2000);
解决了问题。
谢谢你尝试过的人..