无论如何,我无法在多个设备上运行一个测试脚本。
作为示例,我从某个站点提取了一个测试apk和测试脚本,该示例在应用程序中找到一个文本框,然后输入“ Hello World!”。进入脚本就可以了。我目前正在尝试在两台设备上测试脚本。我创建了四个批处理脚本,其中两个运行两个具有不同参数的appium服务器实例,另外两个运行两个具有不同参数(包括功能)的测试脚本实例。
批处理文件的构造:
run-servers.bat
start "Appium Server 1" appium -p 5000 -bp 5100 --session-override
start "Appium Server 2" appium -p 5001 -bp 5101 --session-override
(我不知道--session-override
到底应该做什么,因为互联网上没有对它的详细描述,但是不管有没有它,都会产生相同的结果)。
run-testscript.bat
start "Test 1" node testing.js 5000 9 Emulator-9 emulator-5554
start "Test 2" node testing.js 5001 7 Emulator-7 emulator-5556
(脚本文件后的其他参数为:
<Port> <Android-Version> <Device Name> <Unique ID>
)
和脚本:
const driver = require("webdriverio");
const args = process.argv;
const caps = {
port: parseInt(args[2]),
capabilities: {
platformName: "Android",
platformVersion: args[3],
deviceName: args[4],
app: "D:/Node/Appium/Test/apk/ApiDemos-debug.apk",
appPackage: "io.appium.android.apis",
appActivity: ".view.TextFields",
automationName: "UiAutomator2",
uniqueID: args[5]
}
};
async function test(caps) {
const client = await driver.remote(caps);
const field = await client.$("android.widget.EditText");
await field.setValue("Hello World!");
const value = await field.getText();
assert.equal(value, "Hello World!");
await client.deleteSession();
}
test(caps);
当我运行两个测试实例时,该应用程序将在两台设备上启动,但是在一台设备上却没有输入“ Hello World!”。另一方面。在没有输入的设备打开的服务器上,还存在“ ECONNRESET:服务器端发生错误等等”。
答案 0 :(得分:1)
您需要在Appium配置中添加 systemPort 。为每个设备使用不同的 systemPort 值(例如 8201 , 8202 等)。