gpt4 book ai didi

javascript - IOS:当我尝试执行某些触摸操作时出现 "Failed: Method is not implemented"错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:06:26 25 4
gpt4 key购买 nike

我正在测试 Hybrid 应用程序,我尝试在 iOS 上执行一些触摸操作,例如在 WebView 上执行 doubleTap 和 tapAndHold。我收到“失败:方法未实现”错误。

我试过下面的代码:

browser.switchTo().frame(0);
return browser.touchActions().doubleTap(element).perform();

但是当我尝试的时候

return browser.touchActions().tap(element).perform();

一切正常。
对于 Android,这段代码工作正常。

Appium:1.7.1
Protractor :5.1.2
webdriver-manager 12.0.6.
MacOS High Sierra

那么如何在 iOS 上执行此触摸操作?

conf.js:

var wd = require('wd'),
wdBridge = require('wd-bridge')(require('protractor'), wd);
const config = {
sync: false,
seleniumAddress: 'http://localhost:4723/wd/hub',
capabilities: {
browserName: '',
appiumVersion: "1.7.1",
deviceName: "iPhone 8",
deviceOrientation: "portrait",
platformName: "iOS",
platformVersion: "11.0",
app:"",
bundleId:'',
launchTimeout: 20000,
webviewConnectRetries: 1,
autoAcceptAlerts: true,
autoWebview: true,
waitForAppScript: 'true',
nativeInstrumentsLib:'false',
showIOSLog:'false',
newCommandTimeout: 5000
},
framework: 'jasmine2',
allScriptsTimeout: 1500000,

jasmineNodeOpts: {
showColors: true,
print: function () {
},
isVerbose: true,
includeStackTrace: true,
defaultTimeoutInterval: 1500000
},
suites: {
smoke: ['./automation/smoke/*.js'],
},
beforeLaunch: function () {
return new Promise(function (resolve) {
reporter.beforeLaunch(resolve);
});
},
onPrepare: function () {
wdBridge.initFromProtractor(exports.config);
browser.ignoreSynchronization = true;
browser.wBridge=wdBridge;
browser.getProcessedConfig()
.then(function (config) {
browser.appPackage = config.capabilities.appPackage;
browser.bundleId = config.capabilities.bundleId;
browser.deviceProperties = config.capabilities.deviceProperties;
browser.platformname = config.capabilities.platformName;
var iOSProperties = {'identifier': browser.bundleId},
androidProperties = {'identifier': browser.appPackage},
params = browser.platformname.toLowerCase() === 'iOS' ? androidProperties : iOSProperties;
browser.ignoreSynchronization = true;
wdBrowser.currentContext().then(function(context) {
console.log('#context');
console.log(context);
});
});

},
useAllAngular2AppRoots: true,
restartBrowserBetweenTests: false
};
exports.config = config;

最佳答案

  1. wd 中没有doubleTap 函数项目,所以你得到的错误是预期的。
  2. 如果您检查 doubleTap 的 appium 服务器命令,您会注意到 wd 客户端代码与 tap 相同代码,所以看起来确实 wd 还不支持 doubleTap

到目前为止,我看到了 2 个选项:

1) 在 wd 触摸操作中更多地使用现有功能,例如尝试

const location = await element.getLocation()
const action = new wd.TouchAction()
action.press({x: location.x, y: location.y})
.release()
.press({x: location.x, y: location.y})
.release()
await browser.performTouchAction(action)

2) 在 wd 中实现 doubleTap项目研究来自 java 或 python 客户端的示例。

关于javascript - IOS:当我尝试执行某些触摸操作时出现 "Failed: Method is not implemented"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47221323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com