Selenium等待加载元素值

时间:2014-06-23 17:35:12

标签: c# selenium automation wait specflow

我看过类似的问题,但我没有得到我需要的帮助,我希望这不是重复......

我希望selenium等待selenium等待特定值。 或者等待一些javascript正在运行。

这是一个例子: 页面对象

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"));

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

谢谢,Daryn

1 个答案:

答案 0 :(得分:0)

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

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