当前位置: 首页 > 知识库问答 >
问题:

Nightwatch.js-无法使用Appium(iOS模拟器)执行touchAction或滚动,正在寻找解决方案

澹台权
2023-03-14

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

当使用web浏览器时,我所需要做的就是在特定元素上发送一个.click()方法,该方法会自动将该元素带入视图,但在iOS模拟器上,情况似乎并非如此。

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

    "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"]')

共有2个答案

齐鹏程
2023-03-14

根据乔特加的建议,我找到了一个解决办法。虽然他最初的建议没有成功,但我还是努力了一下,发现如果我使用document.querySelector([data mr=“grey info”]”)并为其分配一个变量,那么我就能够调用scrollIntoView方法。非常感谢

申屠晟
2023-03-14

我想你想使用". 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);
        }
    });
});
 类似资料:
  • 我试图在iOS模拟器上用Appium 1.11.1做一些UITests,但Swipe不起作用 驱动程序连接看起来很好。。我可以测试driver.reloadApp(),它正在工作 我尝试了在堆栈溢出中找到的一些关于TouchActions的示例 测试通过了,但屏幕上什么也没发生 我也试过这个方法https://stackoverflow.com/a/50388361/7406696 我的模拟器不起

  • 在iOS和Android应用程序中,我无法向下滚动到某个元素。由于从Appium 1.6.3更新到1.7.1,从io.Appium更新到6.1.0,因此不推荐使用滑动方法,唯一的解决方案是使用TouchActions。 我试图用TouchActions解决它,但它根本没有滚动,或者滚动方向错误。 到目前为止,我的解决方案是这样的,也许有人能解释我做错了什么: 这不是完整的代码,但我希望你明白。 如

  • 嗨,我想在appium上使用ios模拟器并行运行ios测试用例。我知道MAC会有限制,因为只有一个模拟器会启动,但有没有后门入口可以让它们并行运行,我不想使用网格,因为有一些原因,所以有没有办法在ios模拟器上并行运行ios测试用例。 如果我一次运行两个不同端口和地址的appium服务器,只有一个ios模拟器会启动,因为它会关闭另一个。 我使用的是1.6.4 appium服务器和Xcode 8。

  • 问题内容: 我在向下滚动到iOS和Android应用程序中的某个元素时遇到麻烦。由于从Appium 1.6.3更新到1.7.1,将io.appium更新到6.1.0,因此不建议使用swipe方法,唯一的解决方案是使用TouchActions。 我尝试使用TouchActions解决它,但是它根本没有滚动,或者滚动方向错误。 到目前为止,我的解决方案看起来像这样,也许有人可以解释我做错了什么: 它不

  • 我已经安装了Appium和所有必要的东西,通过iOS模拟器运行应用程序 然后我启动了一个模拟器并启动了Appium(确保在启动前在设置中设置了应用程序的路径) 我不知道应用程序是否应该在启动后立即开放。这就是为什么我运行督察。似乎设备已连接,应用程序的安装已启动。显示启动屏幕后,应用程序崩溃了。我用另一个应用程序尝试了同样的流程,得到了同样的结果。以下是Appium的日志:

  • 这是我的密码 我想执行滚动,但在屏幕上它没有执行任何操作。这是android设备的屏幕截图 以下是Appium服务器日志: 信息:[调试][引导][调试]已注册的崩溃监视程序。信息:[debug][BOOTSTRAP][debug]客户端连接信息:[debug][BOOTSTRAP][debug]从客户端获取数据:{“cmd”:“action”,“action”:“wake”,“params”:{