Package org.uiautomation.ios.command.uiautomation

Source Code of org.uiautomation.ios.command.uiautomation.ScrollNHandler

/*
* Copyright 2012-2013 eBay Software Foundation and ios-driver committers
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/

package org.uiautomation.ios.command.uiautomation;

import org.json.JSONException;
import org.json.JSONObject;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.Point;
import org.uiautomation.ios.communication.WebDriverLikeRequest;
import org.uiautomation.ios.IOSServerManager;
import org.uiautomation.ios.command.UIAScriptHandler;
import org.uiautomation.ios.utils.CoordinateUtils;
import org.uiautomation.ios.utils.JSTemplate;
import org.uiautomation.ios.drivers.RemoteIOSWebDriver;
import org.uiautomation.ios.wkrdp.model.NodeId;
import org.uiautomation.ios.wkrdp.model.RemoteWebElement;
import org.uiautomation.ios.wkrdp.model.RemoteWebNativeBackedElement;

public class ScrollNHandler extends UIAScriptHandler {

  private static final JSTemplate plainFromElementTemplate = new JSTemplate(
      "var element = UIAutomation.cache.get(%:nodeId$d, false);" +
      "var status = Number(!element.isVisible());" +
      "if (status == 0) {" +
        "var hp = element.hitpoint();" +
        "var toX = hp.x + %:toX$d;" +
        "var toY = hp.y + %:toY$d;" +
        "if (toX < 0) {toX = 0} else if (toX >= %:screenSizeX$d) {toX = %:screenSizeX$d - 1}" +
        "if (toY < 0) {toY = 0} else if (toY >= %:screenSizeY$d) {toY = %:screenSizeY$d - 1}" +
        "UIATarget.localTarget().dragFromToForDuration(hp, {x:toX, y:toY}, 1);" +
      "}" +
      "UIAutomation.createJSONResponse('%:sessionId$s', status, '');",
      "sessionId", "nodeId", "screenSizeX", "screenSizeY", "toX", "toY");
  private static final JSTemplate nativeFromElementTemplate = new JSTemplate(
      "UIATarget.localTarget().dragFromToForDuration({x:%:fromX$d,y:%:fromY$d},{x:%:toX$d,y:%:toY$d},1);" +
          "UIAutomation.createJSONResponse('%:sessionId$s',0,'')",
      "sessionId", "fromX", "fromY", "toX", "toY");
  private static final JSTemplate fromCenterTemplate = new JSTemplate(
      "UIATarget.localTarget().dragFromToForDuration({x:%:fromX$d, y:%:fromY$d}, {x:%:toX$d, y:%:toY$d}, 1);" +
      "UIAutomation.createJSONResponse('%:sessionId$s', 0, '')",
      "sessionId", "fromX", "fromY", "toX", "toY");

  public ScrollNHandler(IOSServerManager driver, WebDriverLikeRequest request) throws Exception {
    super(driver, request);

    JSONObject payload = request.getPayload();
    Dimension screenSize = getNativeDriver().getScreenSize();
    Point offset = new Point(payload.getInt("xoffset"), payload.getInt("yoffset"));
    String elementId = payload.optString("element");
    if (!payload.isNull("element") && !elementId.equals("")) {
      if (RemoteIOSWebDriver.isPlainElement(elementId)) {
        NodeId nodeId = RemoteIOSWebDriver.plainNodeId(elementId);
        plainScrollFromElement(request, screenSize, nodeId.getId(), offset);
      } else {
        nativeScrollFromElement(request, screenSize, elementId, offset);
      }
    } else {
      scrollFromCenter(request, screenSize, offset);
    }
  }

  private void plainScrollFromElement(WebDriverLikeRequest request, Dimension screenSize, int nodeId, Point offset) {
    setJS(plainFromElementTemplate.generate(
        request.getSession(),
        nodeId,
        screenSize.getWidth(),
        screenSize.getHeight(),
        offset.getX(),
        offset.getY()));
  }

  private void nativeScrollFromElement(WebDriverLikeRequest request, Dimension screenSize, String elementId,
                                       Point offset) throws Exception {
    RemoteWebNativeBackedElement element = (RemoteWebNativeBackedElement) getWebDriver().createElement(elementId);
    Point fromPoint = element.getLocation(RemoteWebElement.ElementPosition.CENTER);
    fromPoint = CoordinateUtils.forcePointOnScreen(fromPoint, screenSize);
    Point toPoint = new Point(
        fromPoint.getX() + offset.getX(),
        fromPoint.getY() + offset.getY());
    toPoint = CoordinateUtils.forcePointOnScreen(toPoint, screenSize);
    setJS(nativeFromElementTemplate.generate(
        request.getSession(),
        fromPoint.getX(),
        fromPoint.getY(),
        toPoint.getX(),
        toPoint.getY()));
  }

  private void scrollFromCenter(WebDriverLikeRequest request, Dimension screenSize, Point offset) {
    Point fromPoint = CoordinateUtils.getScreenCenter(screenSize);
    Point toPoint = new Point(fromPoint.getX() + offset.getX(), fromPoint.getY() + offset.getY());
    toPoint = CoordinateUtils.forcePointOnScreen(toPoint, screenSize);
    setJS(fromCenterTemplate.generate(
        request.getSession(),
        fromPoint.getX(),
        fromPoint.getY(),
        toPoint.getX(),
        toPoint.getY()));
  }

  @Override
  public JSONObject configurationDescription() throws JSONException {
    return noConfigDefined();
  }
}
TOP

Related Classes of org.uiautomation.ios.command.uiautomation.ScrollNHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.