Selenium c#:WaitForCondition(如何在ajax页面完全加载时查找)

时间:2013-05-28 17:07:19

标签: c# selenium

我想在c#项目中使用waitforcondition Selenium扩展。 我在论坛上看到人们补充道:     selenium.waitForCondition(“some_javascript_boolean_test_as_a_string”,“5000”)

我怎样才能将它添加到C#项目中,因为命名空间'Selenium'中不存在'WaitForCondition'?

修改  我想检查两个条件。首先加载两个元素,让我们说id = el1和id = el2的元素。之后,从DOM中删除一个元素el2。删除el2后,页面就会被加载。

2 个答案:

答案 0 :(得分:3)

您正在使用WebDriver(从之前的Selenium问题中得到),因此您看到的代码不正确。 selenium.waitForCondition是旧的v1代码。您正在使用漂亮的新闪亮v2代码。

您想要的是OpenQA.Selenium.Support命名空间中的WebDriverWait类。

var driver = new FirefoxDriver();
var waitableDriver = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
var element = waitableDriver.Until(d => d.FindElement(By.Id("something")));

这会等到找到某个元素。但是,它允许您指定任何Func<T, TResult>,因此它提供了一些灵活性的空间。你可以在C#中利用lambdas的力量。

如果您想等待某个元素对用户可见并且在其中有值,该怎么办?如果您在5秒后弹出登录时有消息怎么办?一切皆宜。

此外,还有一些方便的'expected conditions'已经可供您使用,这些是人们可能需要“等待”特定情况才能成为常见的常见情况,例如,这是普通人需要的等待元素不仅在页面中呈现,而且实际上对用户可见。您可以使用ElementIsVisible预期条件,因此您无需手动编写逻辑。

这个概念在Selenium世界中被称为explicit waits,对于自动测试AJAX的应用程序至关重要。

答案 1 :(得分:0)

通过设置WebDriverWait等待bool值而不是IWebElement,我找到了等待条件成立的方法:

            waitableDriver.Until<bool>((d) =>
            {
                try
                {
                    IWebElement elementOverlay = d.FindElement(By.Id("overlay"));
                    return !elementOverlay.Displayed;
                }
                catch (NoSuchElementException)
                {
                    IWebElement element = d.FindElement(By.XPath("//li[@id='newBtn']"));
                    return true;
                }
            });