gpt4 book ai didi

android - 迁移到 Cordova 3.6.3 后,不存在的对话框会阻止 Android 上的 Appium 测试

转载 作者:行者123 更新时间:2023-11-30 02:24:30 24 4
gpt4 key购买 nike

从 Cordova 3.4.0 升级到 Cordova 3.6.3 后;由于一个奇怪的错误,我的 Appium 测试无法继续。通过在 Android 上创建一个基于 Web View 的基本应用程序可以很容易地重现该错误,该应用程序会在测试开始一段时间后发出 window.location.reload()

评估问题

我可以评估问题出在一个特定文件:cordova.js,当我使用 Cordova 构建它时,它成为我应用程序中 js 文件的一部分。我的应用程序只加载一个 javascript 文件:cordova.js,我删除了对其他 js 文件的所有其他依赖项。当该文件在我的应用程序中时(即使 index.html 没有使用其中定义的任何函数),我的测试失败了。如果我删除对该文件的依赖项,测试就会正常进行!

问题是当我的应用发出 window.location.reload();我的测试失败并显示此错误消息:

info: [debug] Responding to client with error: {"status":26,"value":{"message":"A modal dialog was open, blocking this operation","origValue":"unexpected alert open\n (Session info: webview=)\n (Driver info: chromedriver=2.10.267521,platform=Windows NT 6.3 x86_64)"},"sessionId":"965ba51e54f682559e5b8378095bc3d4"}

如何重现

我创建了一个示例应用程序来重现这个东西。您可以找到 app (APK file)C# test我用过。

重现此内容的 APK 在附件中。可以运行一个简单的 Appium 测试来重现问题:

[Test]
public void SimpleTest()
{
this.appPackage = "com.myorg.myapp";
this.appActivity = "myapp";
BeforeAll();
Thread.Sleep(3000);

var submitAddressButton = driver.FindElementByClassName("testClass");
submitAddressButton.Click();

Thread.Sleep(3000);
submitAddressButton = driver.FindElementByClassName("testClass");
Expect(submitAddressButton, Is.Not.Null);

}

重要

报一个dialog,其实很奇怪。经过大量检查后,我可以验证我的应用程序上没有显示 native /webview 对话框。事实上,我看不到任何对话框,如果我尝试使用 Appium 和 WebDriver API 关闭这个幽灵对话框,命令会失败,因为找不到对话框。

注意事项

请考虑问题不在我在测试中使用的 API(Appium 的 C# dotnet 驱动程序)。一切都发生在我在 Mac 上运行的 Appium 服务器上。

最佳答案

我认为这是由于以下基于提示的 js<->java 通信逻辑,它在每次页面重新加载时运行

androidExec.init = function() {
bridgeSecret = +prompt('', 'gap_init:' + nativeToJsBridgeMode);
channel.onNativeReady.fire();
}

https://github.com/apache/cordova-android/blob/master/framework/assets/www/cordova.js#L948

Android native 层可以通过 onJSPrompt(http://developer.android.com/reference/android/webkit/WebChromeClient.html#onJsPrompt(android.webkit.WebView、java.lang.String、java.lang.String、java.lang.String、android.webkit.JsPromptResult))处理此问题,因此不会显示实际的对话框。但是 Selenium 驱动程序看起来无法正确处理这种情况。

关于android - 迁移到 Cordova 3.6.3 后,不存在的对话框会阻止 Android 上的 Appium 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28054582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com