2012-05-10 38 views
0

我想在同一個類中使用Selenium webdriver編寫兩個testng測試 - 一個登錄到應用程序和其他人創建一個新帳戶。driver.findElement(By.linkText(「」))在一個測試中工作,但在另一個拋出異常

這是我下面 步驟 - 使用@BeforeClass對火狐瀏覽器中打開應用程序

@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:找不到元素:{ 「方法」:「鏈接文本」,「選擇器」:「帳戶」}

但是,如果我包含命令「driver.findElement(By.linkText(」Accounts「))。click();」在testLogin()測試中,它起作用。我想在同一瀏覽器會話中運行所有測試。

任何輸入將不勝感激。 謝謝。

回答

0

@BeforeClass將爲每個單獨的測試運行您的設置方法 - 因此對於測試1,將創建一個新的Firefox瀏覽器並且它將會登錄。對於第二個測試,將會創建另一個新的Firefox瀏覽器,它將嘗試查找帳戶鏈接 - 我假設僅在登錄時才顯示,但第二個瀏覽器此時不會登錄。

你確定你是在@BeforeClass之後嗎?

+0

TestNG中,在測試中運行相同的瀏覽器窗口,但createAccount()方法在login()之前被調用,因此它拋出異常。使用dependsOnMethods解決了這個問題。 – user1387236

1

@BeforeClass對於一個類只運行一次。因此,如果您將兩個測試都保存在同一個類中,則執行順序爲@beforeClass,第一個測試用例,然後是第二個測試用例(到達此測試時應可見您的帳戶鏈接)。

測試順序未被測試。所以,如果帳戶鏈接只有在您登錄後纔可見,那麼您的案件可能並不總是通過。因此,問題可能是

  1. 元素沒有出現當到達 或
  2. 的createAccount您的createAccount()測試的時間登錄之前被調用,由於該賬戶鏈接不可用。

如果您希望您的測試用例按特定順序執行,請使用dependsOnMethods並使createAccount依賴於testLogin方法。 (請參考Testng Dependent methods

+0

謝謝niharika_neo。 createAccount在testLogin之前運行,所以我得到了異常。使用dependsOnMethods解決了這個問題。 – user1387236

0

我想你的第二個測試方法是先執行。它需要執行第一種方法(用於登錄)來獲取「帳戶」鏈接。您需要在第二種方法中使用dependsOnMethod,以便testLogin執行1st,然後執行createAccountMethod。您的setUp()方法對於@BeforeClass似乎是可以的。所以,請保持setUp()方法不變。聲明其它兩種方法:

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

在上面的代碼TESTLOGIN()將執行第一次,然後testCreateAccount()方法,以便在所需鏈接點擊不會錯過

相關問題