2014-06-23 213 views
0

我已经看过类似的问题,但我没有得到我需要的帮助,我希望这不是一个重复...硒等待元素值加载

我想硒等硒等为特定的价值。 或等待一些JavaScript正在运行。

下面是一个例子: Page对象

class Converter 
{ 
    private IWebDriver _webDriver; 

    [FindsBy(How = How.Id, Using = "tabin")] 
    public IWebElement HexVaue { get; set; } 

    [FindsBy(How = How.Id, Using = "resulttxt")] 
    public IWebElement DecimalValue { get; set; } 

    [FindsBy(How = How.CssSelector, Using = "#content > form > input[type='button']")] 
    public IWebElement ConvertButton { get; set; } 

    public Converter(IWebDriver webDriver) 
    { 
     _webDriver = webDriver; 

     PageFactory.InitElements(_webDriver, this); 
    } 

测试代码:

 _driver = new FirefoxDriver(); 
     _driver.Navigate().GoToUrl("http://www.binaryhexconverter.com/hex-to-decimal-converter"); 
     _converter = new Converter(_driver); 
     _converter.HexVaue.SendKeys("100"); 
     _converter.ConvertButton.Click(); 
     var wait = new WebDriverWait(_driver, TimeSpan.FromSeconds(5)); 
     // Assert.AreEqual("256", _converter.DecimalValue.GetAttribute("value")); // Fails 
     wait.Until(d => _converter.DecimalValue.GetAttribute("value").Equals("256")); 

如果我做一个典型的NUnit断言没有这个wait.Until,则测试失败。这是我在Selenium中做这个断言的正确方法吗?

谢谢,Daryn

回答

0

这真的取决于您的应用程序。 Selenium运行速度非常快,有时会在应用程序准备就绪之前断言。我经常发现,当您不确定特定元素的状态时,添加wait.until是应用断言的最简单方法。

当常见的性能技巧是加载元素,然后直接修改DOM以便用户看到页面被加载时,即使DOM在初始屏幕加载后被修改,我发现这一点特别有用。