0

我正在尝试在同一个类中编写两个 testng 测试(使用 Selenium webdriver) - 一个登录到应用程序,另一个创建一个新帐户。

这些是我正在遵循的步骤 - 使用 @BeforeClass 在 Firefox 浏览器上打开应用程序

@BeforeClass
public void setUp() throws Exception {
    driver = new FirefoxDriver();
    baseUrl = "http://www.salesforce.com";
    driver.get(baseUrl + "/");
}
  • 首先测试登录网站

    @Test
    public void testLogin() throws Exception {
    driver.findElement(By.id("username")).sendKeys(strUsername);
    driver.findElement(By.id("password")).sendKeys(strPassword);
    driver.findElement(By.id("Login")).click();
    

    }

  • 第二次测试创建一个新帐户

    @Test
    public void createAccount() throws Exception {
    driver.findElement(By.linkText("Accounts")).click();
    ************************
            ************************
            ************************
            ************************
            ************************
    

    }

我的问题是,当我运行这个 testng 测试时,我在第二个测试中遇到异常: org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"link text","selector":"Accounts"}

但如果我包含命令“driver.findElement(By.linkText("Accounts")).click();” 在 testLogin() 测试中,它可以工作。我想在同一个浏览器会话中运行我的所有测试。

任何输入将不胜感激。谢谢。

4

3 回答 3

1

@BeforeClass 只为一个班级运行一次。因此,如果您将两个测试保留在同一个类中,则执行顺序是 @beforeClass ,您的第一个测试用例,然后是您的第二个测试用例(您的帐户链接应该在您到达此测试时可见)。

不保证测试的顺序。因此,如果帐户链接仅在您登录后可见,那么您的案例可能不会一直通过。所以,问题可能是

  1. 达到您的 createAccount() 测试时,该元素未出现,或者
  2. createAccount 在登录前被调用,因此帐户链接不可用。

如果您希望您的测试用例按特定顺序执行,请使用 dependsOnMethods 并使 createAccount 依赖于 testLogin 方法。(参考Testng 依赖方法

于 2012-05-10T17:40:33.980 回答
0

@BeforeClass 将为每个单独的测试运行您的设置方法 - 因此对于测试 1,将创建一个新的 Firefox 浏览器并登录。对于第二个测试,将创建另一个新的 Firefox 浏览器,它会尝试查找 Accounts 链接——我假设它仅在您登录时显示,但是此时第二个浏览器不会登录。

你确定你在@BeforeClass 之后吗?

于 2012-05-10T16:40:57.567 回答
0

我猜你的第二个测试方法首先被执行。它需要执行第一种方法(用于登录)以获取“帐户”链接。您需要在第二个方法中使用dependsOnMethod,以便testLogin 将执行第一个然后createAccountMethod。@BeforeClass 似乎可以使用您的 setUp() 方法。因此,保持 setUp() 方法不变。将其他两种方法声明为:

@Test
public void testLogin() throws Exception {
//your code here
}
@Test(dependsOnMethods{"testLogin"})
public void testCreateAccount() throws Exception {
//your code here
}

在上面的代码中 testLogin() 将执行第一个然后 testCreateAccount() 方法,这样您想要点击的链接就不会错过

于 2012-08-11T07:15:58.383 回答