0

我正在使用 NUnit 在 Selenium 中创建一些测试。我有一些点击没有通过的问题,因为按钮没有正确加载。我确实有一个等待,应该等到按钮可点击,但它们似乎在实际可点击之前是可点击的,并且点击失败。在我单击之前,我可以看到该元素确实具有正确的 href 链接,但没有任何反应。

单击之前的静态延迟确实“修复”了它,但它是一个糟糕的解决方案,它减慢了整个测试过程并且经常在压力测试期间中断。

我很确定这是页面上的 javascript 很慢并且在点击之前没有正确初始化。

我想而不是检查它是否可点击,而是检查点击是否做了任何事情。我想在点击之前和之后匹配页面源,但并非所有点击都一定会改变 html,因此只是破坏了其他测试。

这是我目前的点击方法。不过,等待似乎毫无用处。

    public void click(IWebElement element)
    {
        IsDisplayed(element);

        Console.Write("Clicking " + element.GetAttribute("href"));

        WebDriverWait wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10));
        wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(element));

        element.Click();

        Console.WriteLine(" ✓");
    }

经常失败的测试是我打开页面并在检查显示某些元素后单击一个按钮。

4

1 回答 1

0

看来你很接近了。当您为 诱导WebDriverWaitElementToBeClickable(),一旦返回元素,您需要对其进行调用 click()。实际上,您的代码块将是:

WebDriverWait wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10));
wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(element)).Click();

更新

作为替代方案,您可以ExecuteScript()IJavaScriptExecutor使用如下:

WebDriverWait wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10));
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].click();", wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(element)));
于 2019-10-25T14:19:41.983 回答