【问题标题】:OneTimeSetup doesnt seem to be finishing before other tests are ran在运行其他测试之前,OneTimeSetup 似乎没有完成
【发布时间】:2021-10-02 14:42:02
【问题描述】:

我目前正在尝试在网页上查找一个元素,但收到一个异常,即它不存在。我认为这种情况正在发生,因为网页在开始寻找元素之前并没有完全加载。我在我的 OneTimeSetUp setup() 方法中等待,但这似乎没有做任何事情......所有测试似乎在等待完成之前运行。在继续测试并尝试查找元素之前,是否有人对我能够确保网页加载的位置有任何建议?

我当前的 Setup() 方法:

//Executes before tests start
    //Open Homebanking URL and Login
    [OneTimeSetUp]
    public void Setup()
    {
        var _driver = DriverHelper.Driver;
        var driverHelper = new DriverHelper();
        _driver.Url = driverHelper.homebankingURL;
        driverHelper.maximizeWindow(_driver);

        var loginPage = new HomeBankingLoginPage();

        //Enters login credentials
        loginPage.UserName.SendKeys(usr);
        loginPage.Password.SendKeys(pwrd);
        loginPage.Submit.Click();

        //Lets the webpage load before continuing
        _driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(30);

        // Checks to make sure the dashboard loaded
        Assert.IsTrue(driverHelper.IsElementPresent(_driver, By.Id("SvgjsSvg1001")));

    }

【问题讨论】:

    标签: c# selenium unit-testing testing mstest


    【解决方案1】:

    我建议在这里使用Explicit waits:

    显式等待可用于 Selenium 客户端的命令式, 程序语言。它们允许您的代码停止程序执行, 或冻结线程,直到您通过它的条件解决。这 条件以一定的频率被调用,直到超时 等待已过。这意味着只要条件返回 一个虚假的值,它将继续尝试和等待。

    WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
    IWebElement firstResult = wait.Until(e => e.FindElement(By.Id("SvgjsSvg1001")));
    

    然后你就可以随意断言了。

    如果您需要Official reference

    【讨论】:

    • 我刚刚尝试过,但它似乎仍然绕过了所有这些......这看起来很奇怪......我确实得到了一个新异常 OpenQA.Selenium.WebDriverException: chrome not reachable跨度>
    • 浏览器是否正常打开?
    • 它给了我数据;屏幕然后它不会在那之后加载,那是它最终会抛出异常的时候
    • 可以给我网址吗?
    猜你喜欢
    • 2021-01-23
    • 2021-02-15
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-11
    相关资源
    最近更新 更多