Appium + Android + webdriverio,如何单击列表元素

时间:2018-10-04 16:24:17

标签: android node.js appium webdriver-io

我开始使用Appium在Android应用程序上运行UI测试(并且一旦我将其在Android上运行就可能运行iOS)

我正在尝试使用nodeJSwebdriverio进行测试。

问题是,我似乎无法单击列表中的元素(列表是动态创建的,因此元素都具有相同的ID)

这是节点代码。当我运行它时,appium会正确启动一个模拟器并打开我的应用程序:

const wdio = require("webdriverio");

const opts = {
  port: 4723,
  desiredCapabilities: {
    platformName: "Android",
    platformVersion: "8.0",
    deviceName: "Android Emulator",
    app: "/path/to/application.apk",
    appWaitActivity: "com.package.SomeActivity",
    automationName: "UiAutomator2",
    avd: "Nexus_5X_API_26"
  }
};

const client = wdio.remote(opts);


client
  .init()
  .elements('id:theIdOfTheList') // This retrieves a list of 4 elements
  .element()[3] // This gives a NoSuchElementError
  .end();

我应该用什么代替.element()[3]来完成这项工作(或者有完全不同的方式去做吗?)

我在鸦片中看到已检索到列表的4个元素:

  

状态为200的响应:{“ sessionId”:“ 1c21baa1-60ec-4e5f-b51f-f738698660ad”,“ status”:0,“ value”:[{“ ELEMENT”:“ 53d31f1f-af25-4621-85cd -b2f881a5c770“},{” ELEMENT“:” 4c3909ab-6f65-426a-b831-9a7d5e069ba8“},{” ELEMENT“:” e0fd1f12-0193-48ea-a168-4d45f63d27b3“},{” ELEMENT“:” 87b7abda-3738 -4411-a544-572243cd7502“}]}

2 个答案:

答案 0 :(得分:0)

我对Node.js并不熟悉,但是从它的外观来看,您并没有在任何地方存储该元素数组,而随后的element()调用只是在寻找另一个不相关的元素。由于您没有提供搜索参数,因此它什么也找不到。

请原谅我对您语言的无知,但以下内容应能为您提供所需的信息:

.elements('id:theIdOfTheList')[3]

答案 1 :(得分:0)

这样的事情怎么样。 (我将同步模式用于webdriverio)。这可能在 异步模式。

client
.init()
.elements('id:theIdOfTheList', function(err, resp) {
 resp.value.forEach(function(elem) {
  // log elem
       })
  })
.end();