2017-02-10 78 views
1

我一直在自學Selenium在過去的幾個星期,並開始寫我自己的測試,我可以讓我所有的快樂流測試工作正常,但我的首先嚐試編寫測試來檢查錯誤消息不起作用。硒Webdriver - 測試失敗斷言,如果沒有在調試模式下運行C#visual studio

作爲概述測試是非常簡單的:

  1. 輸入一個有效的郵政編碼在搜索框中
  2. 點擊搜索
  3. 斷言屏幕顯示在搜索框下方的錯誤消息。

我知道我的代碼的邏輯是當我運行正向流程(輸入郵編,單擊搜索,新頁面打開)時自動化測試工作正常。另外,當我在調試模式下運行測試並逐步通過失敗的斷言時,測試通過拾取錯誤消息。

我的測試代碼

[TestClass] 
public class invalidSearch 
{ 
    [TestInitialize] 
    public void Init() 
    { 
     driver.Initialize(); 
    } 

    [TestMethod] 
    public void Invalid_Location_Returns_Error() 
    { 
     Homepage.GoTO_HomePage(); 
     SearchPage.enterSearch("CFYUGHGYHYTDFD").Search(); 
     Assert.IsTrue(SearchErrorMessage.IsInValidLocation("Please enter a valid location or postcode", "Validation Fails")); 
    } 

    [TestCleanup] 
    public void Cleanup() 
    { 
     driver.Close(); 
    } 

我斷言類

public class SearchErrorMessage 
{ 
    public static bool IsInValidLocation(string InvalidLocation) 
    { 
     var ErrorMessage = driver.Instance.FindElement(By.XPath("/html/body/header/div/div[4]/div/div/div[2]/div[1]/form/div[2]/span[2]")); 
     bool result = ErrorMessage.Text.Contains(InvalidLocation); 
     return result; 
    } 

driver

public class driver 
{ 
    public static IWebDriver Instance { get; set; } 

    public static void Initialize() 
    { 
     Instance = new ChromeDriver(@"C:\Users\xxxxxx.xxxxxx\Documents\Visual Studio 2015\Drivers\Chrome"); 
     Instance.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10)); 
    } 

    public static void Close() 
    { 
     Instance.Close(); 
    } 

回答

0

你可能只需要一個明確的等待,試試這個:

public static bool IsInValidLocation(string invalidLocation) 
    { 
     By selector = By.XPath("/html/body/header/div/div[4]/div/div/div[2]/div[1]/form/div[2]/span[2]"); 
     // You might want to research how to construct stable xpaths/selctors 
     new WebDriverWait(driver.Instance, TimeSpan.FromSeconds(5)).Until(ExpectedConditions.ElementIsVisible(selector)); 
     var ErrorMessage = driver.Instance.FindElement(selector); 
     bool result = ErrorMessage.Text.Contains(invalidLocation); 
     return result; 
    } 

上述代碼會給出該消息長達5秒的時間出現,並且如果它在5秒內未出現,將會引發超時異常。如果需要,您可以調整它以等待更長的時間。

+0

另外,將等待的東西移動到可以從任何地方調用的廣義方法是一個好主意:) – mrfreester

+0

Thankyou爲此,但是我得到一個錯誤與您給我的代碼WebDriverWait(驅動程序,驅動程序命令是突出顯示並告訴我「驅動程序是在給定的上下文中無效的類型」是否有什麼我需要在我的驅動程序類別中做不同的操作來實現此目的? –

+0

同樣感謝您對xpath/selectors的建議,它是在我的頭腦清單上,首先,我只想獲得一些測試工作,然後開始計算如何重構我的代碼以簡化它們。 –