Nightwatch.js - 无法使用 Appium(iOS 模拟器)执行触摸操作或滚动,寻找解决方案

Nightwatch.js - Cannot perform touchAction or scroll with Appium (iOS Simulator), looking for solutions

我正在 运行通过 Nightwatch 和 Appium 进行一些测试,但我无法使用 iOS 模拟器成功实现滚动操作。我的测试设置为能够在 Chrome、Safari 或 Firefox 浏览器或使用 Safari 的 iOS 模拟器上 运行。该应用程序是使用 React 构建的,我正在使用 Javascript。一切 运行 都很顺利,直到我必须滚动到屏幕上的特定元素。

使用网络浏览器时,我需要做的就是在特定元素上发送 .click() 方法,它会自动将该元素带入视图,但在 iOS 模拟器上不会似乎是这样。

这是我在 nightwatch.conf.js 文件中为 iOS 设置的内容。到目前为止,我从网上搜索中看到的任何方法都不够用。 Appium 文档列出了几种方法,但其中 none 是可执行的,或者是无提示地失败了。有没有人对如何使用此设置正确执行滚动有可能的解决方案或建议?谢谢,非常感谢

    "ios": {
      "selenium_start_process": false,
      "selenium_port": 4723,
      "selenium_host": "localhost",
      "silent": true,
      "automationName": "XCUITest",
      "desiredCapabilities": {
        "browserName": "safari",
        "platformName": "iOS",
        "platformVersion": "12.2",
        "deviceName": "iPad Pro (9.7 -inch)"
      }
    },

这是我尝试实现的示例(目标是移动到按钮元素并在它进入视图后单击它 - 它是一个下拉菜单)

       browser
            .assert.elementPresent('div[data-mr="quiz-dont-know"]')
            .click('div[data-mr="quiz-dont-know"]')
            .assert.elementPresent('div[data-mr="grey-info"]')
            browser.pause(2000)
            browser.element('css selector', 'div[data-"mr=grey-info"]', function(button) {
                console.log("THIS ELEMENT IS " + button.value.ELEMENT);
                browser.moveTo(button.value.ELEMENT, 10, 10)
                browser.elementIdClick(button.value.ELEMENT);
            })
            .pause(2000)
            .assert.elementPresent('div[data-mr="grey-info-options"]')

我想你想使用“.scrollIntoView()”

buttons.value.forEach((button, index) => {
    browser.elementIdText(button.ELEMENT, result => {
        if(result.value === 'None') {
            console.log("THIS ELEMENT IS " + button.ELEMENT);
            browser.execute(function(button) {
                //var elmnt =button // based on user comment
                  var elmnt = document.querySelector([data-mr="grey-info"]') 
                elmnt.scrollIntoView();
            });
            browser.elementIdClick(button.ELEMENT);
        }
    });
});

顺应 Jortega 的建议,我找到了解决方案。尽管他最初的建议没有成功,但我稍微考虑了一下,发现如果我使用 document.querySelector([data-mr="grey-info"]') 并为其分配一个变量,那么我就能够调用 scrollIntoView 方法。非常感谢