2

我在 WebdriverIO 和 mocha 的帮助下启动本机应用程序,但无法与设备通信,但能够启动应用程序但不能与元素交互。

android_app_test.js

const webdriverio = require('webdriverio');
const androidOptions = require('../../../helpers/caps').androidOptions;
const assert = require('chai').assert;

androidOptions.capabilities.appPackage = "com.google.android.calculator"
androidOptions.capabilities.appActivity = "com.android.calculator2.Calculator"

describe('Create Chrome web session', function () {
    
    let client;

    before(async function () {
        client = await webdriverio.remote(androidOptions)
    });

    after(async function () {
        await client.deleteSession();
    });

    it('should create and destroy Android browser session', async function () {
        const elem = await $('#digit_2')
        elem.waitForDisplayed(3000);

        await client.touchClick('digit_2');
    });
});

配置.js

var Mocha = require('mocha'), fs = require('fs');

var mocha = new Mocha({
    reporter: 'mochawesome-screenshots',
    reporterOptions: {
        reportDir: 'customReportDir',
        reportName: 'customReportName',
        reportTitle: 'customReportTitle',
        reportPageTitle: 'customReportPageTitle',
        takePassedScreenshot: true,
        clearOldScreenshots: true,
        shortScrFileNames: true,
        jsonReport: false,
        multiReport: false
    },
    timeout: 600000,
})

var file = ['./test/basic/app/']; //location of the test js

for (var i = 0; i < file.length; i++) {
    fs.readdirSync(file[i]).forEach(function (filename) {
        mocha.addFile(file[i] + filename);
    });
}

mocha.run(function (failures) {
    process.on('exit', function () {
        process.exit(failures);
    });
});

包.json

"scripts": {
    "test": "mocha config.js"
  },

不确定,我认为我的配置有问题,否则

4

3 回答 3

6

$全局是通过 WebdriverIO 测试运行器添加的。由于您通过独立模式使用 wdio,因此您无法访问这些全局变量。试试这个:

const elem = await client.$('#digit_2')
于 2019-05-09T18:43:41.563 回答
-1

确保您使用的是最新版本的 Webdriver.io。Webdriver.io v5 是也实现了$('selector')快捷方式的最新版本。

如果您使用的是 Webdriver.io v4 - 您可能仍需要使用browser.element('selector')来查找您的元素。

它出现在您问题中的标签中,并且您发布的代码可能在版本 4 上。

于 2019-05-11T01:44:09.070 回答
-2

$通常用作运行 JQuery 函数的简写(例如$('#digit_2')“android_app_test.js”文件中的 , )。

WebdriverIO的文档:

The $ command is a short way to call the findElement command in order to fetch a single element on the page. It returns an object that with an extended prototype to call action commands without passing in a selector. However if you still pass in a selector it will look for that element first and call the action on that element.

要解决此问题,您必须使用以下命令安装 JQuery:

在终端运行中:

npm install --save jquery
npm install --save-dev @types/jquery

然后像这样在“android_app_test.js”文件的顶部导入它

import * as $ from "jquery";

于 2019-05-09T10:43:24.560 回答