0

在使用左侧菜单和顶部通知等功能测试 Web 应用程序(next.js)时,我遇到了单击下拉按钮的问题。脚步:

  1. 机器人单击左侧菜单中的按钮
  2. 当子页面出现时,它单击按钮以展开按钮列表
  3. 与此同时,通知出现并且扩展的按钮列表关闭。- 测试失败

Testcafe 中点击后等待页面完全加载的最佳方法是什么?我尝试了 waitForReact 但它可能不能在测试中的任何时候使用,而只能在 beforeEach 钩子中使用。在 Java 中等待页面加载我使用了自定义等待:

public void waitAllRequest() {
    waitUntilJSReady();
    ajaxComplete();
    waitUntilJQueryReady();
    waitUntilAngularReady();
}

这是上述方法的实现(没有 waitUntilAngularReady):

public class JSWaiter {
    private static WebDriver jsWaitDriver;
    private static WebDriverWait jsWait;
    private static JavascriptExecutor jsExec;
    
    //Get the driver 
    public static void setDriver (WebDriver driver) {
        jsWaitDriver = driver;
        jsWait = new WebDriverWait(jsWaitDriver, 10);
        jsExec = (JavascriptExecutor) jsWaitDriver;
    }
    
   private void ajaxComplete() {
        jsExec.executeScript("var callback = arguments[arguments.length - 1];"
            + "var xhr = new XMLHttpRequest();" + "xhr.open('GET', '/Ajax_call', true);"
            + "xhr.onreadystatechange = function() {" + "  if (xhr.readyState == 4) {"
            + "    callback(xhr.responseText);" + "  }" + "};" + "xhr.send();");
    }
    
    private void waitForJQueryLoad() {
        try {
            ExpectedCondition<Boolean> jQueryLoad = driver -> ((Long) ((JavascriptExecutor) this.driver)
                .executeScript("return jQuery.active") == 0);
            boolean jqueryReady = (Boolean) jsExec.executeScript("return jQuery.active==0");
            if (!jqueryReady) {
                jsWait.until(jQueryLoad);
            }
        } catch (WebDriverException ignored) {
        }
    }

    private void waitUntilJSReady() {
        try {
            ExpectedCondition<Boolean> jsLoad = driver -> ((JavascriptExecutor) this.driver)
                .executeScript("return document.readyState").toString().equals("complete");
            boolean jsReady = jsExec.executeScript("return document.readyState").toString().equals("complete");
            if (!jsReady) {
                jsWait.until(jsLoad);
            }
        } catch (WebDriverException ignored) {
        }
    }
    
    private void waitUntilJQueryReady() {
        Boolean jQueryDefined = (Boolean) jsExec.executeScript("return typeof jQuery != 'undefined'");
        if (jQueryDefined) {
            poll(20);
            waitForJQueryLoad();
            poll(20);
        }
    }

如何在 Testcafe 中实现这样的代码?

4

1 回答 1

1

您没有分享您的测试代码片段,因此我无法重现我这边的错误行为或准确回答您的问题:“TestCafe 中等待页面完全加载后单击的最佳方法是什么?”。请尝试以下方法之一等待页面加载:

  1. 选择器超时
  2. t .Wait 方法

如果这些方法没有帮助,请分享您的测试的完整代码片段,以便我分析它并给您一个准确的答案。

于 2022-02-28T14:08:44.333 回答