如何通过 WebdriverIO 和 Appium 访问 Cordova App 的 localStorage?
How can I access localStorage of Cordova App via WebdriverIO and Appium?
我目前正在尝试为用 Angular 编写的 cordova 应用程序编写一些自动化测试。
我当前的设置如下:
版本:
appium: 1.7.2
wdio-appium-service: 0.2.3
webdriverio: 4.11.0
wdio.conf.js
exports.config = {
port: 4723,
logLevel: 'error',
capabilities: [{
platformName: 'Android',
platformVersion: '8.1',
deviceName: 'any',
app: '../cordova_app/platforms/android/app/build/outputs/apk/debug/app-debug.apk',
autoWebview: true,
autoGrantPermissions: true
}],
// specs: ['./tests/spec/**/*.js'],
specs: ['./tests/spec/login.js'],
services: ['appium'],
reporters: ['spec'],
framework: 'jasmine',
jasmineNodeOpts: {
defaultTimeoutInterval: 90000
}
}
tests/spec/login.js
describe('Language and market choosing process', () => {
beforeEach(() => {
browser.timeouts('implicit', 2000);
});
afterEach(() => {
browser.reload();
});
it('should go through login process', () => {
const selectCountryBtn = $('.fsr-login__market-chooser');
selectCountryBtn.click();
// everything works so far
browser.localStorage('POST', {key: 'test', value: 'test123'});
// Failed: unknown error: call function result missing 'value'
});
});
当我 运行 在我的 Android 8.1 模拟器上进行此测试时,测试一到达本地存储部分就崩溃并出现错误:
Failed: unknown error: call function result missing "value"
Error: An unknown server-side error occurred while processing the command.
at localStorage("POST", [object Object]) - index.js:316:3
WebdriverIO的localStorageAPI描述here
我做错了什么?
Appium API 不提供函数 localStorage
。
我认为这是你的问题。此外,如果您使用 3.4 版本,请检查 Appium 部分,而不仅仅是协议。本机应用程序没有与浏览器相同的 localStorage,您无法轻松访问它。
我同意 localStorage
操纵是一项棘手的工作,尤其是跨浏览器、跨平台等。在处理应用程序 cookie 或本地存储时,我默认使用纯 JS 命令来实现我的目标。
因此,我建议您尝试 browser.execute() command to manipulate the browser's local storage:
browser.execute("localStorage.setItem('socialMediaRuinsTheWorld', true)");
或
browser.execute((keyName, keyValue) => {
localStorage.setItem(keyName, keyValue);
}, "testing", "theLocalStorage");
结果:
我目前正在尝试为用 Angular 编写的 cordova 应用程序编写一些自动化测试。 我当前的设置如下:
版本:
appium: 1.7.2
wdio-appium-service: 0.2.3
webdriverio: 4.11.0
wdio.conf.js
exports.config = {
port: 4723,
logLevel: 'error',
capabilities: [{
platformName: 'Android',
platformVersion: '8.1',
deviceName: 'any',
app: '../cordova_app/platforms/android/app/build/outputs/apk/debug/app-debug.apk',
autoWebview: true,
autoGrantPermissions: true
}],
// specs: ['./tests/spec/**/*.js'],
specs: ['./tests/spec/login.js'],
services: ['appium'],
reporters: ['spec'],
framework: 'jasmine',
jasmineNodeOpts: {
defaultTimeoutInterval: 90000
}
}
tests/spec/login.js
describe('Language and market choosing process', () => {
beforeEach(() => {
browser.timeouts('implicit', 2000);
});
afterEach(() => {
browser.reload();
});
it('should go through login process', () => {
const selectCountryBtn = $('.fsr-login__market-chooser');
selectCountryBtn.click();
// everything works so far
browser.localStorage('POST', {key: 'test', value: 'test123'});
// Failed: unknown error: call function result missing 'value'
});
});
当我 运行 在我的 Android 8.1 模拟器上进行此测试时,测试一到达本地存储部分就崩溃并出现错误:
Failed: unknown error: call function result missing "value"
Error: An unknown server-side error occurred while processing the command.
at localStorage("POST", [object Object]) - index.js:316:3
WebdriverIO的localStorageAPI描述here
我做错了什么?
Appium API 不提供函数 localStorage
。
我认为这是你的问题。此外,如果您使用 3.4 版本,请检查 Appium 部分,而不仅仅是协议。本机应用程序没有与浏览器相同的 localStorage,您无法轻松访问它。
我同意 localStorage
操纵是一项棘手的工作,尤其是跨浏览器、跨平台等。在处理应用程序 cookie 或本地存储时,我默认使用纯 JS 命令来实现我的目标。
因此,我建议您尝试 browser.execute() command to manipulate the browser's local storage:
browser.execute("localStorage.setItem('socialMediaRuinsTheWorld', true)");
或
browser.execute((keyName, keyValue) => {
localStorage.setItem(keyName, keyValue);
}, "testing", "theLocalStorage");
结果: