Best JavaScript code snippet using playwright-internal
CCEventManager.js
Source:CCEventManager.js  
...781        this._inDispatch++;782        if(!event || !event.getType)783            throw "event is undefined";784        if (event.getType() == cc.Event.TOUCH) {785            this._dispatchTouchEvent(event);786            this._inDispatch--;787            return;788        }789        var listenerID = cc.__getListenerID(event);790        this._sortEventListeners(listenerID);791        var selListeners = this._listenersMap[listenerID];792        if (selListeners != null)793            this._dispatchEventToListeners(selListeners, this._onListenerCallback, event);794        this._updateListeners(event);795        this._inDispatch--;796    },797    _onListenerCallback: function(listener, event){798        event._setCurrentTarget(listener._getSceneGraphPriority());799        listener._onEvent(event);...PageAgent.js
Source:PageAgent.js  
...521    } else {522      throw new Error(`Unknown type ${type}`);523    }524  }525  async _dispatchTouchEvent({type, touchPoints, modifiers}) {526    const frame = this._frameTree.mainFrame();527    const defaultPrevented = frame.domWindow().windowUtils.sendTouchEvent(528      type.toLowerCase(),529      touchPoints.map((point, id) => id),530      touchPoints.map(point => point.x),531      touchPoints.map(point => point.y),532      touchPoints.map(point => point.radiusX === undefined ? 1.0 : point.radiusX),533      touchPoints.map(point => point.radiusY === undefined ? 1.0 : point.radiusY),534      touchPoints.map(point => point.rotationAngle === undefined ? 0.0 : point.rotationAngle),535      touchPoints.map(point => point.force === undefined ? 1.0 : point.force),536      touchPoints.length,537      modifiers);538    return {defaultPrevented};539  }540  async _dispatchTapEvent({x, y, modifiers}) {541    // Force a layout at the point in question, because touch events542    // do not seem to trigger one like mouse events.543    this._frameTree.mainFrame().domWindow().windowUtils.elementFromPoint(544      x,545      y,546      false /* aIgnoreRootScrollFrame */,547      true /* aFlushLayout */);548    const {defaultPrevented: startPrevented} = await this._dispatchTouchEvent({549      type: 'touchstart',550      modifiers,551      touchPoints: [{x, y}]552    });553    const {defaultPrevented: endPrevented} = await this._dispatchTouchEvent({554      type: 'touchend',555      modifiers,556      touchPoints: [{x, y}]557    });558    if (startPrevented || endPrevented)559      return;560    const frame = this._frameTree.mainFrame();561    frame.domWindow().windowUtils.sendMouseEvent(562      'mousemove',563      x,564      y,565      0 /*button*/,566      0 /*clickCount*/,567      modifiers,...application-Android.js
Source:application-Android.js  
1const Accelerometer = require("../device/accelerometer");2const Location = require("../device/location");3const TypeUtil = require("../util/type");4const AndroidConfig = require("../util/Android/androidconfig");5const Http = require("../net/http");6const Network = require('../device/network');7const NativeSpratAndroidActivity = requireClass("io.smartface.android.SpratAndroidActivity");8const NativeActivityLifeCycleListener = requireClass("io.smartface.android.listeners.ActivityLifeCycleListener");9const NativeR = requireClass(AndroidConfig.packageName + '.R');10function ApplicationWrapper() {}11//InputMethodManager to close softinput keyboard12const { INPUT_METHOD_SERVICE, INPUT_METHOD_MANAGER } = require('../util/Android/systemservices');13// Intent.ACTION_VIEW14const ACTION_VIEW = "android.intent.action.VIEW";15// Intent.FLAG_ACTIVITY_NEW_TASK16const FLAG_ACTIVITY_NEW_TASK = 268435456;17const REQUEST_CODE_CALL_APPLICATION = 114, FLAG_SECURE = 8192;18var _onMinimize, _onMaximize, _onExit, _onBackButtonPressed,19    _onReceivedNotification, _onRequestPermissionsResult, _keepScreenAwake = false,20    _keyboardMode, _sliderDrawer, _dispatchTouchEvent, activity = AndroidConfig.activity,21    spratAndroidActivityInstance = NativeSpratAndroidActivity.getInstance(),_secureWindowContent = false;22var mDrawerLayout = activity.findViewById(NativeR.id.layout_root);23ApplicationWrapper.__mDrawerLayout = mDrawerLayout;24// Creating Activity Lifecycle listener25var activityLifeCycleListener = NativeActivityLifeCycleListener.implement({26    onCreate: function() {},27    onResume: function() {28        if (_onMaximize) {29            _onMaximize();30        }31    },32    onPause: function() {33        if (_onMinimize) {34            _onMinimize();35        }36    },37    onStop: function() {},38    onStart: function() {},39    onDestroy: function() {40        cancelAllBackgroundJobs();41        if (_onExit) {42            _onExit();43        }44    },45    onRequestPermissionsResult: function(requestCode, permission, grantResult) {46        var permissionResults = {};47        permissionResults['requestCode'] = requestCode;48        permissionResults['result'] = (grantResult === 0);49        ApplicationWrapper.android.onRequestPermissionsResult && ApplicationWrapper.android.onRequestPermissionsResult(permissionResults);50    },51    onActivityResult: function(requestCode, resultCode, data) {52        if (requestCode === Location.CHECK_SETTINGS_CODE) {53            Location.__onActivityResult && Location.__onActivityResult(resultCode);54        }55    },56    dispatchTouchEvent: function(actionType, x, y) {57        let dispatchTouchEvent;58        if (ApplicationWrapper.android.dispatchTouchEvent)59            dispatchTouchEvent = ApplicationWrapper.android.dispatchTouchEvent();60        return (typeof(dispatchTouchEvent) === 'boolean') ? dispatchTouchEvent : false;61    }62});63// Attaching Activity Lifecycle event64spratAndroidActivityInstance.addActivityLifeCycleCallbacks(activityLifeCycleListener);65Object.defineProperties(ApplicationWrapper, {66    // properties67    'sliderDrawer': {68        get: function() {69            return _sliderDrawer;70        },71        set: function(drawer) {72            const SliderDrawer = require('../ui/sliderdrawer');73            if (drawer instanceof SliderDrawer) {74                detachSliderDrawer(_sliderDrawer);75                _sliderDrawer = drawer;76                attachSliderDrawer(_sliderDrawer);77            } else {78                throw TypeError("Object must be SliderDrawer instance");79            }80        },81        enumerable: true82    },83    'keepScreenAwake': {84        get: function() {85            return _keepScreenAwake;86        },87        set: function(value) {88            _keepScreenAwake = value;89            if(_keepScreenAwake) {90                // 128 = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON91                activity.getWindow().addFlags(128);92            } else {93                // 128 = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON94                activity.getWindow().clearFlags(128);95            }96        },97        enumerable: true98    },99    'byteReceived': {100        get: function() {101            const NativeTrafficStats = requireClass("android.net.TrafficStats");102            var UID = activity.getApplicationInfo().uid;103            return NativeTrafficStats.getUidRxBytes(UID) / (1024 * 1024);104        },105        enumerable: true106    },107    'byteSent': {108        get: function() {109            const NativeTrafficStats = requireClass("android.net.TrafficStats");110            var UID = activity.getApplicationInfo().uid;111            return NativeTrafficStats.getUidTxBytes(UID) / (1024 * 1024);112        },113        enumerable: true114    },115    // For publish case, project.json file will be encrypted we can not decrypt this file, we do not have a key so let SMFApplication handle this116    'currentReleaseChannel': {117        get: function() {118            return Application.currentReleaseChannel;119        },120        enumerable: true121    },122    // For publish case, project.json file will be encrypted we can not decrypt this file, we do not have a key so let SMFApplication handle this123    'smartfaceAppName': {124        get: function() {125            return Application.smartfaceAppName;126        },127        enumerable: true128    },129    // For publish case, project.json file will be encrypted we can not decrypt this file, we do not have a key so let SMFApplication handle this130    'appName': {131        get: function() {132            return Application.smartfaceAppName;133        },134        enumerable: true135    },136    // For publish case, project.json file will be encrypted we can not decrypt this file, we do not have a key so let SMFApplication handle this137    'version': {138        get: function() {139            return Application.version;140        },141        enumerable: true142    },143    'android': {144        value: {},145        enumerable: true146    },147    'Android': {148        value: {},149        enumerable: true150    },151    'call': {152        /* ToDo : Multiple parameter is deprected.*/153        value: function() {154            if (arguments.length === 1 && (typeof arguments[0] === "object"))155                var {156                    uriScheme,157                    data,158                    onSuccess,159                    onFailure,160                    isShowChooser,161                    chooserTitle,162                    action = ACTION_VIEW163                } = arguments[0];164            else165                var [uriScheme, data, onSuccess, onFailure, isShowChooser, chooserTitle, action = ACTION_VIEW] = arguments;166            if (!TypeUtil.isString(uriScheme)) {167                throw new TypeError('uriScheme must be string');168            }169            const NativeIntent = requireClass("android.content.Intent");170            const NativeUri = requireClass("android.net.Uri");171            let intent = new NativeIntent(action);172            let uriObject;173            if (TypeUtil.isObject(data) && Object.keys(data).length > 0) {174                // we should use intent.putExtra but it causes native crash.175                let params = Object.keys(data).map(function(k) {176                    return k + '=' + data[k];177                }).join('&');178                if (uriScheme.indexOf("|") !== -1) {179                    configureIntent.call(intent, uriScheme);180                    uriObject = NativeUri.parse(params);181                } else {182                    let uri = uriScheme + "?" + params;183                    uriObject = NativeUri.parse(uri);184                }185            } else {186                if (uriScheme.indexOf("|") !== -1)187                    configureIntent.call(intent, uriScheme);188                else189                    uriObject = NativeUri.parse(uriScheme);190            }191            uriObject && intent.setData(uriObject);192            let packageManager = activity.getPackageManager();193            let activitiesCanHandle = packageManager.queryIntentActivities(intent, 0);194            if (activitiesCanHandle.size() > 0) {195                if (TypeUtil.isBoolean(isShowChooser) && isShowChooser) {196                    let title = TypeUtil.isString(chooserTitle) ? chooserTitle : "Select and application";197                    let chooserIntent = NativeIntent.createChooser(intent, title);198                    try {199                        activity.startActivity(chooserIntent); // Due to the AND-3202: we have changed startActivityForResult200                    } catch (e) {201                        onFailure && onFailure();202                        return;203                    }204                } else {205                    try {206                        activity.startActivity(intent); // Due to the AND-3202: we have changed startActivityForResult207                    } catch (e) {208                        onFailure && onFailure();209                        return;210                    }211                }212                onSuccess && onSuccess();213                return;214            }215            onFailure && onFailure();216        },217        enumerable: true218    },219    'exit': {220        value: function() {221            activity.finish();222        },223        enumerable: true224    },225    'restart': {226        value: function() {227            spratAndroidActivityInstance.restartSpratActivity();228        },229        enumerable: true230    },231    'checkUpdate': {232        value: function(callback, user) {233            if (TypeUtil.isFunction(callback)) {234                const RAU = require("./RAU");235                RAU.checkUpdate(callback, user);236            }237        },238        enumerable: true239    },240    'hideKeyboard': {241        value: function() {242            var focusedView = activity.getCurrentFocus();243            if (!focusedView)244                return;245            var windowToken = focusedView.getWindowToken();246            var inputManager = AndroidConfig.getSystemService(INPUT_METHOD_SERVICE, INPUT_METHOD_MANAGER);247            inputManager.hideSoftInputFromWindow(windowToken, 0); //2.parameter: Provides additional operating flags. Currently may be 0 248        },249        enumerable: true250    },251    // events252    // We can not handle application calls for now, so let SMFApplication handle this253    'onExit': {254        get: function() {255            return _onExit;256        },257        set: function(onExit) {258            if (TypeUtil.isFunction(onExit) || onExit === null) {259                _onExit = onExit;260            }261        },262        enumerable: true263    },264    'onMaximize': {265        get: function() {266            return _onMaximize;267        },268        set: function(onMaximize) {269            if (TypeUtil.isFunction(onMaximize) || onMaximize === null) {270                _onMaximize = onMaximize;271            }272        },273        enumerable: true274    },275    'onMinimize': {276        get: function() {277            return _onMinimize;278        },279        set: function(onMinimize) {280            if (TypeUtil.isFunction(onMinimize) || onMinimize === null) {281                _onMinimize = onMinimize;282            }283        },284        enumerable: true285    },286    'onReceivedNotification': {287        get: function() {288            return _onReceivedNotification;289        },290        set: function(callback) {291            if (TypeUtil.isFunction(callback) || callback === null) {292                _onReceivedNotification = callback;293            }294        },295        enumerable: true296    },297    // We can not detect js exceptions, so let SMFApplication handle this298    'onUnhandledError': {299        get: function() {300            return Application.onUnhandledError;301        },302        set: function(onUnhandledError) {303            if (TypeUtil.isFunction(onUnhandledError) || onUnhandledError === null) {304                Application.onUnhandledError = onUnhandledError;305            }306        },307        enumerable: true308    },309    'onApplicationCallReceived': {310        get: function() {311            return Application.onApplicationCallReceived;312        },313        set: function(_onApplicationCallReceived) {314            if (TypeUtil.isFunction(_onApplicationCallReceived) || _onApplicationCallReceived === null) {315                Application.onApplicationCallReceived = _onApplicationCallReceived;316            }317        },318        enumerable: true319    },320});321ApplicationWrapper.registOnItemSelectedListener = function() {322    if (ApplicationWrapper.__isSetOnItemSelectedListener) {323        return;324    }325    ApplicationWrapper.__isSetOnItemSelectedListener = true;326    spratAndroidActivityInstance.attachItemSelectedListener({327        onOptionsItemSelected: function() {328            let leftItem = ApplicationWrapper.currentPage._headerBarLeftItem;329            if (leftItem) {330                leftItem.onPress && leftItem.onPress();331            }332        }333    });334};335function cancelAllBackgroundJobs() {336    Location.stop();337    Accelerometer.stop();338    Http.__cancelAll();339    Network.__cancelAll();340}341// TODO: Beautify the class. It is too complex! It is not a readable file! 342ApplicationWrapper.setRootController = function(params) {343    const ViewController = require("../util/Android/transition/viewcontroller");344    ViewController.deactivateRootController(ApplicationWrapper.currentPage);345    // ViewController.activateController(params.controller);346    params.controller.__isActive = true;347    ViewController.setController(params);348};349function configureIntent(uriScheme) {350    const intent = this;351    let classActivityNameArray = uriScheme.split("|");352    intent.setClassName(classActivityNameArray[0], classActivityNameArray[1]);353}354function attachSliderDrawer(sliderDrawer) {355    if (sliderDrawer) {356        sliderDrawer.__isAttached = true;357        var sliderDrawerId = sliderDrawer.nativeObject.getId();358        var isExists = mDrawerLayout.findViewById(sliderDrawerId);359        if (!isExists) {360            mDrawerLayout.addView(sliderDrawer.nativeObject);361            mDrawerLayout.bringToFront();362            if (sliderDrawer.drawerListener) {363                mDrawerLayout.addDrawerListener(sliderDrawer.drawerListener);364            }365        }366        sliderDrawer.onLoad && sliderDrawer.onLoad();367    }368}369function detachSliderDrawer(sliderDrawer) {370    if (sliderDrawer) {371        sliderDrawer.__isAttached = false;372        mDrawerLayout.removeView(sliderDrawer.nativeObject);373        if (sliderDrawer.drawerListener) {374            mDrawerLayout.removeDrawerListener(sliderDrawer.drawerListener);375        }376    }377}378ApplicationWrapper.statusBar = require("./statusbar");379ApplicationWrapper.ios = {};380ApplicationWrapper.ios.canOpenUrl = function(url) {};381ApplicationWrapper.ios.onUserActivityWithBrowsingWeb = function() {};382Object.defineProperties(ApplicationWrapper.android, {383    'packageName': {384        value: activity.getPackageName(),385        enumerable: true386    },387    'dispatchTouchEvent': {388        get: function() {389            return _dispatchTouchEvent;390        },391        set: function(callback) {392            _dispatchTouchEvent = callback;393        },394        enumerable: true395    },396    'onBackButtonPressed': {397        get: function() {398            return _onBackButtonPressed;399        },400        set: function(callback) {401            _onBackButtonPressed = callback;402            spratAndroidActivityInstance.attachBackPressedListener({403                onBackPressed: function() {404                    _onBackButtonPressed && _onBackButtonPressed();405                }406            });407        },408        enumerable: true409    },410    'checkPermission': {411        value: function(permission) {412            if (!TypeUtil.isString(permission)) {413                throw new Error('Permission must be Application.Permission type');414            }415            if (AndroidConfig.sdkVersion < AndroidConfig.SDK.SDK_MARSHMALLOW) {416                // PackageManager.PERMISSION_GRANTED417                const NativeContextCompat = requireClass('androidx.core.content.ContextCompat');418                return NativeContextCompat.checkSelfPermission(activity, permission) === 0;419            } else {420                var packageManager = activity.getPackageManager();421                // PackageManager.PERMISSION_GRANTED422                return packageManager.checkPermission(permission, ApplicationWrapper.android.packageName) == 0;423            }424        },425        enumerable: true426    },427    // @todo requestPermissions should accept permission array too, but due to AND- it accepts just one permission.428    'requestPermissions': {429        value: function(requestCode, permissions) {430            if (!TypeUtil.isNumeric(requestCode) || !(TypeUtil.isString(permissions))) {431                throw new Error('requestCode must be numeric or permission must be Application.Permission type or array of Application.Permission.');432            }433            if (AndroidConfig.sdkVersion < AndroidConfig.SDK.SDK_MARSHMALLOW) {434                ApplicationWrapper.android.onRequestPermissionsResult && ApplicationWrapper.android.onRequestPermissionsResult({435                    requestCode: requestCode,436                    result: ApplicationWrapper.android.checkPermission(permissions)437                });438            } else {439                activity.requestPermissions(array([permissions], "java.lang.String"), requestCode);440            }441        },442        enumerable: true443    },444    'shouldShowRequestPermissionRationale': {445        value: function(permission) {446            if (!TypeUtil.isString(permission)) {447                throw new Error('Permission must be Application.Permission type');448            }449            return ((AndroidConfig.sdkVersion > AndroidConfig.SDK.SDK_MARSHMALLOW) && activity.shouldShowRequestPermissionRationale(permission));450        },451        enumerable: true452    },453    'onRequestPermissionsResult': {454        get: function() {455            return _onRequestPermissionsResult;456        },457        set: function(callback) {458            if (TypeUtil.isFunction(callback) || callback === null) {459                _onRequestPermissionsResult = callback;460            }461        }462    },463    'Permissions': {464        value: {},465        enumerable: true466    },467    'navigationBar': {468        get: function() {469            return (require("./android/navigationbar"));470        },471        enumerable: true472    },473    'keyboardMode': {474        get: function() {475            return _keyboardMode;476        },477        set: function(modeEnum) {478            if (typeof modeEnum !== "number")479                return;480            _keyboardMode = modeEnum;481            activity.getWindow().setSoftInputMode(modeEnum);482        },483        enumerable: true484    },485    'locale': {486        get: function() {487            const LocaleConfigurationUtil = requireClass("io.smartface.android.utils.LocaleConfigurationUtil");488            return LocaleConfigurationUtil.getDeviceLanguage();489        },490        set: function(languageCode) {491            if (TypeUtil.isString(languageCode)) {492                const NativePreferenceManager = requireClass("android.preference.PreferenceManager");493                const LocaleHelperUtil = requireClass("io.smartface.android.utils.LocaleConfigurationUtil");494                var sharedPreferences = NativePreferenceManager.getDefaultSharedPreferences(activity);495                sharedPreferences.edit().putString("AppLocale", languageCode).commit();496                LocaleHelperUtil.changeConfigurationLocale(activity);497            }498        },499        enumerable: true500    },501    'getLayoutDirection': {502        get: function() {503            return activity.getResources().getConfiguration().getLayoutDirection();504        },505        enumerable: true506    },507    'setAppTheme': {508        value: currentTheme => {509            const NativePreferenceManager = requireClass("android.preference.PreferenceManager");510            let sharedPreferences = NativePreferenceManager.getDefaultSharedPreferences(activity);511            let _themeRes = activity.getResources().getIdentifier(currentTheme, "style", activity.getPackageName());512            sharedPreferences.edit().putInt("SFCurrentBaseTheme", _themeRes).commit();513        },514        enumerable: true515    },516    'secureWindowContent': {517        get : () => _secureWindowContent,518        set : (value) => {519            _secureWindowContent = value;520            if(_secureWindowContent)521                activity.getWindow().setFlags(FLAG_SECURE, FLAG_SECURE);522            else 523                activity.getWindow().clearFlags(FLAG_SECURE);524        } 525    }526});527Object.defineProperties(ApplicationWrapper.Android, {528    'Permissions': {529        value: {},530        enumerable: true531    }532});533Object.defineProperties(ApplicationWrapper.Android.Permissions, {534    'READ_CALENDAR': {535        value: 'android.permission.READ_CALENDAR',536        enumerable: true537    },538    'WRITE_CALENDAR': {539        value: 'android.permission.WRITE_CALENDAR',540        enumerable: true541    },542    'CAMERA': {543        value: 'android.permission.CAMERA',544        enumerable: true545    },546    'READ_CONTACTS': {547        value: 'android.permission.READ_CONTACTS',548        enumerable: true549    },550    'WRITE_CONTACTS': {551        value: 'android.permission.WRITE_CONTACTS',552        enumerable: true553    },554    'GET_ACCOUNTS': {555        value: 'android.permission.GET_ACCOUNTS',556        enumerable: true557    },558    'ACCESS_FINE_LOCATION': {559        value: 'android.permission.ACCESS_FINE_LOCATION',560        enumerable: true561    },562    'ACCESS_COARSE_LOCATION': {563        value: 'android.permission.ACCESS_COARSE_LOCATION',564        enumerable: true565    },566    'RECORD_AUDIO': {567        value: 'android.permission.RECORD_AUDIO',568        enumerable: true569    },570    'READ_PHONE_STATE': {571        value: 'android.permission.READ_PHONE_STATE',572        enumerable: true573    },574    'CALL_PHONE': {575        value: 'android.permission.CALL_PHONE',576        enumerable: true577    },578    'READ_CALL_LOG': {579        value: 'android.permission.READ_CALL_LOG',580        enumerable: true581    },582    'WRITE_CALL_LOG': {583        value: 'android.permission.WRITE_CALL_LOG',584        enumerable: true585    },586    'ADD_VOICEMAIL': {587        value: 'com.android.voicemail.permission.ADD_VOICEMAIL',588        enumerable: true589    },590    'USE_SIP': {591        value: 'android.permission.USE_SIP',592        enumerable: true593    },594    'PROCESS_OUTGOING_CALLS': {595        value: 'android.permission.PROCESS_OUTGOING_CALLS',596        enumerable: true597    },598    'BODY_SENSORS': {599        value: 'android.permission.BODY_SENSORS',600        enumerable: true601    },602    'SEND_SMS': {603        value: 'android.permission.SEND_SMS',604        enumerable: true605    },606    'RECEIVE_SMS': {607        value: 'android.permission.RECEIVE_SMS',608        enumerable: true609    },610    'READ_SMS': {611        value: 'android.permission.READ_SMS',612        enumerable: true613    },614    'RECEIVE_WAP_PUSH': {615        value: 'android.permission.RECEIVE_WAP_PUSH',616        enumerable: true617    },618    'RECEIVE_MMS': {619        value: 'android.permission.RECEIVE_MMS',620        enumerable: true621    },622    'READ_EXTERNAL_STORAGE': {623        value: 'android.permission.READ_EXTERNAL_STORAGE',624        enumerable: true625    },626    'WRITE_EXTERNAL_STORAGE': {627        value: 'android.permission.WRITE_EXTERNAL_STORAGE',628        enumerable: true629    },630    'USE_FINGERPRINT': {631        value: 'android.permission.USE_FINGERPRINT',632        enumerable: true633    },634    'WRITE_APN_SETTINGS': {635        value: 'android.permission.WRITE_APN_SETTINGS',636        enumerable: true637    }638});639Object.assign(ApplicationWrapper.android.Permissions, ApplicationWrapper.Android.Permissions);640ApplicationWrapper.Android.NavigationBar = {641    /** @type {typeof import("./android/navigationbar/style")} */642    Style: require("./android/navigationbar/style")643};644Object.freeze(ApplicationWrapper.Android.NavigationBar);645ApplicationWrapper.Android.KeyboardMode = {646    KeyboardAdjustNothing: 48, //SOFT_INPUT_ADJUST_NOTHING647    KeyboardAdjustPan: 32, //SOFT_INPUT_ADJUST_PAN648    KeyboardAdjustResize: 16, //SOFT_INPUT_ADJUST_RESIZE649    KeyboardAdjustUnspecified: 0, //SOFT_INPUT_ADJUST_UNSPECIFIED650    AlwaysVisible: 5, //SOFT_INPUT_STATE_ALWAYS_VISIBLE651    AlwaysHidden: 3 //SOFT_INPUT_STATE_ALWAYS_HIDDEN652};653Object.freeze(ApplicationWrapper.Android.KeyboardMode);654/**655 * @type {{LEFTTORIGHT: 0, RIGHTTOLEFT: 1}}656 */657ApplicationWrapper.LayoutDirection = {658    LEFTTORIGHT: 0,659    RIGHTTOLEFT: 1660};661Object.freeze(ApplicationWrapper.LayoutDirection);...touch.js
Source:touch.js  
1/**2 * Touchäºä»¶ç±»3 * ç¨äºæµè¯touchç³»åäºä»¶4 */5class Touch {6  /**7   * _createTouchEvent æ¯ææµè§å¨è°ç¨touchç³»åäºä»¶ï¼åå§åäºä»¶8   * @param  {String}     type äºä»¶åç§°(touchend)9   * @return {Object}      æµè§å¨åçäºä»¶å¯¹è±¡10   */11  createTouchEvent(type) {12    return new window.TouchEvent(type, {13      bubbles: true,14      cancelable: true15    })16  }17  /**18   * _dispatchTouchEvent åºåtouchç³»åäºä»¶19   * @param  {String(Selector) | HTMLDivElement} eventTarget äºä»¶è§¦åDOMå
ç´ 20   * @param  {Object} event       æµè§å¨åçäºä»¶å¯¹è±¡21   * @return {HTMLDivElement}             äºä»¶è§¦åDOMå
ç´ 22   */23  dispatchTouchEvent(eventTarget, event) {24    if (typeof eventTarget === 'string') {25      eventTarget = document.querySelector(eventTarget)26    }27    eventTarget.dispatchEvent(event)28    return eventTarget29  }30}31
...Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3  const browser = await chromium.launch();4  const context = await browser.newContext();5  const page = await context.newPage();6  await page._dispatchTouchEvent({7    timestamp: Date.now(),8  });9  await page._dispatchTouchEvent({10    timestamp: Date.now(),11  });12  await browser.close();13})();Using AI Code Generation
1const { chromium } = require('playwright');2const { _dispatchTouchEvent } = require('playwright/lib/server/supplements/recorder/recorderSupplement');3(async () => {4  const browser = await chromium.launch({ headless: false });5  const context = await browser.newContext();6  const page = await context.newPage();7  await page.waitForSelector('text=Get started');8  await page.click('text=Get started');9  await page.waitForSelector('text=API');10  await page.click('text=API');11  await page.waitForSelector('text=Browser');12  await page.click('text=Browser');13  await page.waitForSelector('text=class: Browser');14  await page.click('text=class: Browser');15  await page.waitForSelector('text=close');16  await page.click('text=close');17  await page.waitForSelector('text=BrowserContext');18  await page.click('text=BrowserContext');19  await page.waitForSelector('text=class: BrowserContext');20  await page.click('text=class: BrowserContext');21  await page.waitForSelector('text=close');22  await page.click('text=close');23  await page.waitForSelector('text=Page');24  await page.click('text=Page');25  await page.waitForSelector('text=class: Page');26  await page.click('text=class: Page');27  await page.waitForSelector('text=close');28  await page.click('text=close');29  await page.waitForSelector('text=Selectors');30  await page.click('text=Selectors');31  await page.waitForSelector('text=class: Selectors');32  await page.click('text=class: Selectors');33  await page.waitForSelector('text=close');34  await page.click('text=close');35  await page.waitForSelector('text=Selectors');36  await page.click('text=Selectors');37  await page.waitForSelector('text=class: Selectors');38  await page.click('text=class: Selectors');39  await page.waitForSelector('text=close');40  await page.click('text=close');41  await page.waitForSelector('text=Selectors');42  await page.click('text=Selectors');43  await page.waitForSelector('text=class: Selectors');44  await page.click('text=class: Selectors');45  await page.waitForSelector('text=close');46  await page.click('text=close');Using AI Code Generation
1const { _dispatchTouchEvent } = require('playwright/lib/server/chromium/crPage.js');2const { chromium } = require('playwright');3(async () => {4  const browser = await chromium.launch();5  const context = await browser.newContext();6  const page = await context.newPage();7  await _dispatchTouchEvent(page, 'touchstart', {8  });9  await browser.close();10})();Using AI Code Generation
1const { _dispatchTouchEvent } = require('playwright/lib/server/chromium/crPage');2const { Page } = require('playwright/lib/server/chromium/crPage');3const { assert } = require('playwright/lib/utils/utils');4const { Touchscreen } = require('playwright/lib/server/chromium/crInput');5async function emulateTouchEvent(page, type, x, y, modifiers) {6  const touchPoint = {7  };8  const touchPoints = [touchPoint];9  const modifiersList = modifiers || 0;10  const timestamp = Date.now();11  const button = 'left';12  const buttons = 1;13  const clickCount = 1;14  const touchType = 'touchstart';15  const touchId = 1;16  const event = {17  };18  await _dispatchTouchEvent.call(page, event);19}20async function emulateTouch(page, x, y) {21  await emulateTouchEvent(page, 'touchstart', x, y);22  await emulateTouchEvent(page, 'touchend', x, y);23}24async function emulatePinch(page, x, y) {25  const touchPoint = {26  };27  const touchPoints = [touchPoint, touchPoint];28  const modifiersList = 0;29  const timestamp = Date.now();30  const button = 'left';31  const buttons = 1;32  const clickCount = 1;33  const touchType = 'touchstart';34  const touchId = 1;35  const event = {Using AI Code Generation
1const {chromium} = require('playwright');2(async () => {3  const browser = await chromium.launch();4  const context = await browser.newContext();5  const page = await context.newPage();6  await page.evaluate(async () => {7    const touch = new Touch({8      identifier: Date.now(),9      target: document.elementFromPoint(100, 100),10    });11    const touchEvent = new TouchEvent('touchstart', {12    });13    await window._dispatchTouchEvent('touchstart', touchEvent);14  });15  await browser.close();16})();17class Touch {18  constructor({ identifier, target, clientX, clientY, pageX, pageY }) {19    this.identifier = identifier;20    this.target = target;21    this.clientX = clientX;22    this.clientY = clientY;23    this.pageX = pageX;24    this.pageY = pageY;25  }26}27class TouchEvent {28  constructor(type, {29  }) {30    this.type = type;31    this.cancelable = cancelable;32    this.bubbles = bubbles;33    this.touches = touches;34    this.targetTouches = targetTouches;35    this.changedTouches = changedTouches;36    this.shiftKey = shiftKey;37  }38}39const {helper} = require('playwright');40const {Touch} = require('./touch');41const {TouchEvent} = require('./touchevent');42const {EventEmitter} = require('events');43const {Page} = require('playwright');44class Dispatcher extends EventEmitter {45  constructor() {46    super();47  }48}49class TouchDispatcher extends Dispatcher {50  constructor() {51    super();52  }53}54class Input {55  constructor() {Using AI Code Generation
1const { _dispatchTouchEvent } = require('playwright-core/lib/server/chromium/crInput');2const { getTestState } = require('playwright-core/lib/server/test');3const { getFrameExecutionContext } = require('playwright-core/lib/server/frames');4const frame = await page.mainFrame();5const context = await getFrameExecutionContext(page, frame);6const element = await frame.$('#myElement');7const boundingBox = await element.boundingBox();8const x = boundingBox.x;9const y = boundingBox.y;10const testState = getTestState(page);11_dispatchTouchEvent(testState, 'touchstart', x, y, 0);12_dispatchTouchEvent(testState, 'touchend', x, y, 0);13const frame = await page.mainFrame();14const context = await getFrameExecutionContext(page, frame);15const element = await frame.$('#myElement');16const boundingBox = await element.boundingBox();17const x = boundingBox.x;18const y = boundingBox.y;19const testState = getTestState(page);20await page.evaluate((x, y) => {21    const touchstart = new TouchEvent('touchstart', {22        touches: [new Touch({ identifier: Date.now(), target: document.elementFromPoint(x, y), clientX: x, clientY: y })],23        changedTouches: [new Touch({ identifier: Date.now(), target: document.elementFromPoint(x, yUsing AI Code Generation
1const { _dispatchTouchEvent } = require('playwright/lib/server/chromium/crPage');2const { chromium } = require('playwright');3(async () => {4  const browser = await chromium.launch();5  const context = await browser.newContext();6  const page = await context.newPage();7  await page.click('#tsf > div:nth-child(2) > div > div.FPdoLc.VlcLAe > center > input[type="submit"]:nth-child(1)')8  await _dispatchTouchEvent(page, 'touchstart', [9    { x: 100, y: 100 },10  ]);11  await _dispatchTouchEvent(page, 'touchend', [12    { x: 100, y: 100 },13  ]);14  await page.waitForTimeout(5000);15  await browser.close();16})();Using AI Code Generation
1const { Page } = require('playwright-core/lib/server/page');2const { Dispatcher } = require('playwright-core/lib/server/dispatcher');3const { helper } = require('playwright-core/lib/server/helper');4const { Touchscreen } = require('playwright-core/lib/server/supplements/touchscreen');5const { TouchPoint } = require('playwright-core/lib/server/supplements/touchscreen');6const { TouchscreenDispatcher } = require('playwright-core/lib/server/supplements/touchscreenDispatcher');7const { TouchscreenImpl } = require('playwright-core/lib/server/supplements/touchscreenImpl');8const { Frame } = require('playwright-core/lib/server/frame');9const { FrameDispatcher } = require('playwright-core/lib/server/frameDispatcher');10const { FrameImpl } = require('playwright-core/lib/server/frameImpl');11const { PageDispatcher } = require('playwright-core/lib/server/pageDispatcher');12const { PageImpl } = require('playwright-core/lib/server/pageImpl');13const { PageChannelOwner } = require('playwright-core/lib/server/channels');14const { PageChannel } = require('playwright-core/lib/server/channels');15const { PageBinding } = require('playwright-core/lib/server/pageBinding');16const { PageBindingCall } = require('playwright-core/lib/server/pageBindingCall');17const { PageBindingInitializer } = require('playwright-core/lib/server/pageBindingInitializer');18const { PageBindingCallDispatcher } = require('playwright-core/lib/server/pageBindingCallDispatcher');19const { PageBindingCallImpl } = require('playwright-core/lib/server/pageBindingCallImpl');20const { PageBindingCallChannel } = require('playwright-core/lib/server/channels');21const { PageBindingDispatcher } = require('playwright-core/lib/server/pageBindingDispatcher');22const { PageBindingImpl } = require('playwright-core/lib/server/pageBindingImpl');23const { PageBindingChannel } = require('playwright-core/lib/server/channels');24const { PageBindingCallChannelOwner } = require('playwright-core/lib/server/channels');25const { PageBindingCallChannelOwner } = require('playwright-core/lib/server/channels');26const { PageBindingCallChannelOwner } = require('playwright-core/lib/server/channels');27const { PageBindingCallChannelOwner } = require('playwright-core/lib/server/channels');28const { PageBindingCallChannelOwner } = require('playwright-core/lib/server/channels');Using AI Code Generation
1const { Page } = require('playwright-core/lib/server/page');2Page.prototype._dispatchTouchEvent = async function (type, x, y, modifiers) {3  const { page } = this._delegate;4  const { x: pageX, y: pageY } = await page.evaluateHandle(5    ({ x, y }) => {6      const { x: pageX, y: pageY } = document.elementFromPoint(x, y);7      return { x: pageX, y: pageY };8    },9    { x, y }10  );11  const eventInit = {12  };13  await page.dispatchEvent(pageX, pageY, 'touchstart', eventInit);14  await page.dispatchEvent(pageX, pageY, 'touchend', eventInit);15};16const { Page } = require('playwright-core/lib/server/page');17Page.prototype._dispatchTouchEvent = async function (type, x, y, modifiers) {18  const { page } = this._delegate;19  const { x: pageX, y: pageY } = await page.evaluateHandle(20    ({ x, y }) => {21      const { x: pageX, y: pageY } = document.elementFromPoint(x, y);22      return { x: pageX, y: pageY };23    },24    { x, y }25  );26  const eventInit = {27  };28  await page.dispatchEvent(pageX, pageY, 'touchstart', eventInit);29  await page.dispatchEvent(pageX, pageY, 'touchend', eventInit);30};31const { chromium } = require('playwright');32(async () => {33  const browser = await chromium.launch({ headless: false });34  const context = await browser.newContext();35  const page = await context.newPage();LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!
