gpt4 book ai didi

java - 如何使用 Selenium WebDriver 优雅地测试同一网站的不同用户名和密码?

转载 作者:行者123 更新时间:2023-12-02 03:37:23 25 4
gpt4 key购买 nike

我有以下示例代码,使用用户名和密码登录 Facebook,

@Test
public void fb() {
FirefoxProfile ffprofile = new FirefoxProfile();
ffprofile.setPreference("general.useragent.override", "iPhone"); //this will change the user agent which will open mobile browser
WebDriver driver = new FirefoxDriver(ffprofile);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().window().setSize(new Dimension(400, 800)); //just to change the window size so that it will look like mobile ;)
driver.get("http://www.fb.com/");
driver.findElement(By.name("email")).sendKeys("user1");
driver.findElement(By.name("pass")).sendKeys("password");
driver.findElement(By.name("login")).click();
}

接下来我还有 5 个 Facebook 个人资料,分别是 user2、user3、user4、user5 和 user6。我也想使用这些配置文件登录 Facebook 并进行一些自动化测试。

我的问题是我是否应该针对不同的用户名将上述代码重写 5 次,或者是否有其他优雅的方法来实现此目的?

提前致谢!

最佳答案

您没有提到您正在使用哪个测试框架,所以

  • 如果这是 JUnit,您可以使用 Parameterized tests 。它们将允许您使用各种参数运行相同的测试:

    @RunWith(Parameterized.class)
    public class LoginTest {
    @Parameters
    public static Collection<Object[]> data() {
    return Arrays.asList(new Object[][] {
    { "user1", "password" },
    { "user2", "password" } //...
    });
    }

    private String username, password;

    public LoginTest(String username, String password) {
    this.username = username;
    this.password = password;
    }

    @Test
    public void fb() {
    // most of it won't change, except:
    driver.findElement(By.name("email")).sendKeys(username);
    driver.findElement(By.name("pass")).sendKeys(password);
    // ...
    }
  • Nunit 有 similar concept

  • 最后,如果您无法使用任何这些优点,您可以创建一个代表您的登录函数的函数,并从 5 个不同的测试中调用它。这样你仍然有一些测试调用的冗余,但没有登录的代码:

    private WebDriver driver;

    public void login(String username, String password) {
    driver.findElement(By.name("email")).sendKeys(username);
    driver.findElement(By.name("pass")).sendKeys(password);
    driver.findElement(By.name("login")).click();
    }

    // Move code to init driver to run before every test
    @Before
    public void initDriver() {
    FirefoxProfile ffprofile = new FirefoxProfile();
    ffprofile.setPreference("general.useragent.override", "iPhone"); //this will change the user agent which will open mobile browser
    driver = new FirefoxDriver(ffprofile);
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    driver.manage().window().setSize(new Dimension(400, 800)); //just to change the window size so that it will look like mobile ;)
    driver.get("http://www.fb.com/");
    }

    @Test
    public void fb1() {
    login("user1", "password");
    }

    @Test
    public void fb2() {
    login("user2", "password");
    }

    // etc

顺便说一句:每个类一次初始化驱动程序是一个更好的主意,因为配置文件创建/启动浏览器是一项昂贵的操作,如果您有很多测试,它可能会减慢您的速度。您还应该考虑在每次测试后注销,以便下次登录是干净的。

关于java - 如何使用 Selenium WebDriver 优雅地测试同一网站的不同用户名和密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37286133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com