2017-02-10 46 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的建议,它是在我的头脑清单上,首先,我只想获得一些测试工作,然后开始计算如何重构我的代码以简化它们。 –