微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#Webdriver – 在页面加载之前页面标题断言失败

当我从www网站上的测试切换到我的localhost版本时,这个问题就开始了.在VS 2012中工作,我将开始调试,以便localhost处于活动状态,分离进程以便我可以对其进行测试,然后运行我喜欢的任何测试.一个非常基本的例子:

    [Test]
    public void CanGoToHomePage()
    {
        Pages.HomePage.Goto();
        Assert.IsTrue(Pages.HomePage.IsAt());
    }

它引用的功能如下:

    public class HomePage
    {
        const string Url = "http://localhost:3738";
        const string HomepageTitle = "FunnelFire - Home Page";

        public void Goto()
        {
            browser.Goto(Url);
        }

        public bool IsAt()
        {
            return browser.Title == HomepageTitle;
        }
    }

而实际的硒代码在这里

    public static class browser
    {
        static IWebDriver webDriver = new FirefoxDriver();

        public static void Goto(string url)
        {
            webDriver.Manage().Window.Maximize();
            webDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
            webDriver.Url = url;
        }
    }

现在问题.我在浏览器中添加的10秒隐式等待在加载页面后成功等待最多10秒,以查看它是否可以找到我想要查找的任何信息,这不是问题.

正如我之前所说的那样,在我切换到localhost上进行测试之后,我突然遇到一个奇怪的问题,即页面开始加载(即屏幕仍然是完全白色,没有完成),甚至有时下一页几乎不能完成加载而突然测试只会向上并失败,指向Assert of IsAt返回false,即使它正在加载的页面是正确的.我可以再次立即运行该测试,它会毫无问题地通过.第三次运行它可能会再次随机失败.老实说,我不确定是什么导致了这个问题,任何帮助都将不胜感激!

解决方法:

隐式等待仅用于查找元素.要等待页面标题为某个值,您需要使用显式等待.您可以编写自己的此模式版本,但在.NET绑定中,WebDriver.Support.dll程序集有一个webdriverwait类来帮助解决此问题.它的用途看起来像这样:

// WARNING! Untested code written from memory below. It has not
// been tested or even compiled in an IDE, so may be syntactically
// incorrect. The concept, however, should still be valid. 
public void WaitForTitle(IWebDriver driver, string title, TimeSpan timeout)
{
    webdriverwait wait = new webdriverwait(driver, timeout);
    wait.Until((d) => { return d.Title == title; });
}

您甚至可以修改IsAt方法以使用此模式,捕获WebDriverTimeoutException并在wait函数超时时返回false.

原文地址:https://codeday.me/bug/20190529/1178087.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐