【问题标题】:How can I access localStorage of Cordova App via WebdriverIO and Appium?如何通过 WebdriverIO 和 Appium 访问 Cordova App 的 localStorage?
【发布时间】:2019-11-18 16:22:13
【问题描述】:

我目前正在尝试为我们用 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的localStorage API描述here

我做错了什么?

【问题讨论】:

    标签: selenium cordova jasmine webdriver-io webdriver-io-v4


    【解决方案1】:

    我同意localStorage 操作是一项棘手的工作,尤其是跨浏览器、跨平台等。在处理应用程序 cookie 或本地存储时,我默认使用纯 JS 命令来实现我的目标。

    因此,我建议您尝试使用browser.execute() 命令来操作浏览器的local storage

    browser.execute("localStorage.setItem('socialMediaRuinsTheWorld', true)");
    

    browser.execute((keyName, keyValue) => { 
      localStorage.setItem(keyName, keyValue); 
    }, "testing", "theLocalStorage");
    

    结果:

    【讨论】:

      【解决方案2】:

      Appium API 不提供函数localStorage

      我认为这是你的问题。此外,如果您使用 3.4 版本,请检查 Appium 部分,而不仅仅是协议。本机应用程序没有与浏览器相同的 localStorage,您无法轻松访问它。

      【讨论】:

      • webdriverio 确实
      猜你喜欢
      • 2020-07-09
      • 2022-07-15
      • 2020-10-07
      • 2020-02-06
      • 2016-09-17
      • 1970-01-01
      • 1970-01-01
      • 2016-03-26
      • 2014-03-20
      相关资源
      最近更新 更多