Appium:在Android上使用ChromeDriver处理本机提醒

时间:2016-02-10 22:26:30

标签: android cordova appium

Cordova App,部署到Android模拟器。我的应用程序显示了一个通知提示,我想使用Appium进行测试。 我们正在使用通知插件,在这种情况下显示本机通知。我首先只想接受带有空字符串的提示。

我已经测试过,找到确定按钮: var ok = browser.driver.findElement(by.name('Ok')); ok.click(); 错误是无法找到确定按钮。

我也尝试过: var alert = browser.switchTo().alert(); alert.accept(); 这会导致没有警报打开的错误。在这种情况下,appium登录:

info: JSONWP Proxy: Replacing sessionId 09700a539828795c9ea9d583b68b2250 with 483d2b53-eb0a-4ce2-a697-8776dadf6954 info: <-- GET /wd/hub/session/483d2b53-eb0a-4ce2-a697-8776dadf6954/alert_text 200 7.530 ms - 254 info: --> GET /wd/hub/session/483d2b53-eb0a-4ce2-a697-8776dadf6954/alert_text {} info: JSONWP Proxy: Proxying [GET /wd/hub/session/483d2b53-eb0a-4ce2-a697-8776dadf6954/alert_text] to [GET http://127.0.0.1:9515/wd/hub/session/09700a539828795c9ea9d583b68b2250/alert_text] with body: {} info: JSONWP Proxy: Got response with status 200: {"sessionId":"09700a539828795c9ea9d583b68b2250","status":27,"value":{"message":"no alert open\n (Session info: webview=39.0.0.0)\n (Driver info: chromedriver=2.20.353145 (343b531d31eeb933ec778dbc...

有相关帖子,但没有一个解决方案有效,例如: How to handle native iOS Alerts in Appium using Java how to handle alerts in android using appium

任何可以帮助我解释这个问题的人?

1 个答案:

答案 0 :(得分:0)

我遇到了这个问题,最后想出了一个解决方案。

假设您正在使用wd-bridge,请首先通过量角器配置将wdBrowser对象公开为测试中的全局:

onPrepare: function () {
    var wd = require('wd'),
        protractor = require('protractor'),
        wdBridge = require('wd-bridge')(protractor, wd);
    wdBridge.initFromProtractor(exports.config);
    global.wdBrowser = wdBrowser;
},

然后假设您正在处理的Cordova警报由navigator.notification.alert()function acceptAlert() { let webViewContext; return wdBrowser .currentContext() .then((currentContext) => { webViewContext = currentContext; }) .context("NATIVE_APP") .then(() => { return wdBrowser.elementById("android:id/button1").then((el) => { return el.click(); }, (err) => { console.error("Alert dialog not found"); return wdBrowser; }); }) .then(() => { return wdBrowser.context(webViewContext); }); }; 生成,您可以执行以下操作:

acceptAlert().then(() => {
    console.log("Alert accepted");
});

此功能:

  • 存储对包含Cordova应用程序的Webview上下文的引用
  • 切换到原生上下文
  • 通过其本机ID
  • 查找本机警报OK按钮
  • 点击它
  • 恢复原始Webview上下文

所以你可以像这样使用它:

#count number of words in file
fp=open("hello1.txt","r+");
data=fp.read();
word_count=1;
for i in data:
    if i==" ":
        word_count=word_count+1;
    # end if
# end for
print ("number of words are:", word_count);