如何使用 appium 自动化 webview facebook 登录
Howto automate webview facebook login with appium
我正在尝试在 node.js 中编写一个 appium 功能测试。
当我切换到 webdrivers 上下文时,问题就来了。
这是我的上下文:
[ 'NATIVE_APP', 'WEBVIEW_com.******.***.development' ]
这是测试用例代码:
"use strict";
var wd = require("wd");
require('colors');
var chai = require("chai");
var chaiAsPromised = require("chai-as-promised");
chai.use(chaiAsPromised);
var should = chai.should();
chaiAsPromised.transferPromiseness = wd.transferPromiseness;
var wd = require("wd");
describe("android simple", function () {
this.timeout(300000);
var driver;
var allPassed = true;
before(function () {
driver = wd.promiseChainRemote({
host: 'localhost',
port: 4723
});
driver.on('status', function (info) {
console.log(info.cyan);
});
driver.on('command', function (meth, path, data) {
console.log(' > ' + meth.yellow, path.grey, data || '');
});
driver.on('http', function (meth, path, data) {
console.log(' > ' + meth.magenta, path, (data || '').grey);
});
var desired = {
'browserName': '',
'appium-version': '1.3',
'platformName': 'Android',
'platformVersion': '4.4.2',
'deviceName': 'Android Emulator',
'app': "path/to/apk"
};
return driver
.init(desired)
.setImplicitWaitTimeout(3000);
});
after(function () {
return driver
.quit()
.finally(function () {
if (process.env.SAUCE) {
return driver.sauceJobStatus(allPassed);
}
});
});
afterEach(function () {
allPassed = allPassed && this.currentTest.state === 'passed';
});
it("should find facebook login button", function () {
return driver
.elementById('facebook_login_button')
.click()
.sleep(10000)
.contexts()
.then(function (ctxs) {
console.log(ctxs);
return driver.context(ctxs[ctxs.length - 1]);
})
.elementByName('email')
.sendKeys('test.*****@gmail.com')
.sleep(5000)
;
});
});
并且appium服务器的输出错误:
错误:Chromedriver:错误:处理命令时发生未知的服务器端错误。 (原报错:unknown error: Device emulator-5554 is not online
(驱动信息: chromedriver=2.18.343845 (73dd713ba7fbfb73cbb514e62641d8c96a94682a),platform=Windows NT 10.0 x86_64))
在 JWProxy.command$ (lib/proxy.js:149:15)
在 tryCatch
状态:13,
价值:{消息:'unknown error: Device emulator-5554 is not online\n (Driver info: chromedriver=2.18.343845 (73dd713ba7fbfb73cbb514e62641d8c96a94682a),platform=Windows NT 10.0 x86_64)'},
http代码:200}
提前致谢。
尝试不同的 android 设备,问题是 adb 返回带有设备名称的额外字符。看
https://github.com/appium/appium/issues/5686
我终于解决了这个问题。这只是一个 chromedriver 错误。更新到2.20版,一切正常。
Github 问题:
https://github.com/appium/appium/issues/5616
Chrome 驱动程序发行说明:
https://sites.google.com/a/chromium.org/chromedriver/downloads
我正在尝试在 node.js 中编写一个 appium 功能测试。 当我切换到 webdrivers 上下文时,问题就来了。
这是我的上下文:
[ 'NATIVE_APP', 'WEBVIEW_com.******.***.development' ]
这是测试用例代码:
"use strict";
var wd = require("wd");
require('colors');
var chai = require("chai");
var chaiAsPromised = require("chai-as-promised");
chai.use(chaiAsPromised);
var should = chai.should();
chaiAsPromised.transferPromiseness = wd.transferPromiseness;
var wd = require("wd");
describe("android simple", function () {
this.timeout(300000);
var driver;
var allPassed = true;
before(function () {
driver = wd.promiseChainRemote({
host: 'localhost',
port: 4723
});
driver.on('status', function (info) {
console.log(info.cyan);
});
driver.on('command', function (meth, path, data) {
console.log(' > ' + meth.yellow, path.grey, data || '');
});
driver.on('http', function (meth, path, data) {
console.log(' > ' + meth.magenta, path, (data || '').grey);
});
var desired = {
'browserName': '',
'appium-version': '1.3',
'platformName': 'Android',
'platformVersion': '4.4.2',
'deviceName': 'Android Emulator',
'app': "path/to/apk"
};
return driver
.init(desired)
.setImplicitWaitTimeout(3000);
});
after(function () {
return driver
.quit()
.finally(function () {
if (process.env.SAUCE) {
return driver.sauceJobStatus(allPassed);
}
});
});
afterEach(function () {
allPassed = allPassed && this.currentTest.state === 'passed';
});
it("should find facebook login button", function () {
return driver
.elementById('facebook_login_button')
.click()
.sleep(10000)
.contexts()
.then(function (ctxs) {
console.log(ctxs);
return driver.context(ctxs[ctxs.length - 1]);
})
.elementByName('email')
.sendKeys('test.*****@gmail.com')
.sleep(5000)
;
});
});
并且appium服务器的输出错误:
错误:Chromedriver:错误:处理命令时发生未知的服务器端错误。 (原报错:unknown error: Device emulator-5554 is not online (驱动信息: chromedriver=2.18.343845 (73dd713ba7fbfb73cbb514e62641d8c96a94682a),platform=Windows NT 10.0 x86_64)) 在 JWProxy.command$ (lib/proxy.js:149:15) 在 tryCatch 状态:13, 价值:{消息:'unknown error: Device emulator-5554 is not online\n (Driver info: chromedriver=2.18.343845 (73dd713ba7fbfb73cbb514e62641d8c96a94682a),platform=Windows NT 10.0 x86_64)'}, http代码:200}
提前致谢。
尝试不同的 android 设备,问题是 adb 返回带有设备名称的额外字符。看 https://github.com/appium/appium/issues/5686
我终于解决了这个问题。这只是一个 chromedriver 错误。更新到2.20版,一切正常。
Github 问题: https://github.com/appium/appium/issues/5616
Chrome 驱动程序发行说明: https://sites.google.com/a/chromium.org/chromedriver/downloads