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 方法。非常感谢
我正在 运行通过 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 方法。非常感谢