下面列出了怎么用org.openqa.selenium.interactions.HasTouchScreen的API类实例代码及写法,或者点击链接到github查看源代码。
private void clickAt( WebElement webElement, WebDriver webDriver, int x, int y )
{
if ( webElement != null )
{
Dimension elementSize = webElement.getSize();
int useX = (int) ((double) elementSize.getWidth() * ((double) x / 100.0)) + webElement.getLocation().getX();
int useY = (int) ((double) elementSize.getHeight() * ((double) y / 100.0)) + webElement.getLocation().getY();
if ( ((DeviceWebDriver) webDriver).getNativeDriver() instanceof AppiumDriver )
{
new TouchAction( (AppiumDriver) ((DeviceWebDriver) webDriver).getNativeDriver() ).press( PointOption.point( useX, useY ) ).perform();
}
else if ( ((DeviceWebDriver) webDriver).getNativeDriver() instanceof RemoteWebDriver )
{
if ( ((DeviceWebDriver) webDriver).getNativeDriver() instanceof HasTouchScreen )
new TouchActions( webDriver ).move( useX, useY ).click().build().perform();
else
new Actions( webDriver ).moveByOffset(useX, useY ).click().build().perform();
}
}
}
private Map<String, Object> getDescription(WebDriver instance, Capabilities capabilities) {
DesiredCapabilities caps = new DesiredCapabilities(capabilities.asMap());
caps.setJavascriptEnabled(instance instanceof JavascriptExecutor);
if (instance instanceof TakesScreenshot) {
caps.setCapability(CapabilityType.TAKES_SCREENSHOT, true);
}
if (instance instanceof LocationContext) {
caps.setCapability(CapabilityType.SUPPORTS_LOCATION_CONTEXT, true);
}
if (instance instanceof ApplicationCache) {
caps.setCapability(CapabilityType.SUPPORTS_APPLICATION_CACHE, true);
}
if (instance instanceof NetworkConnection) {
caps.setCapability(CapabilityType.SUPPORTS_NETWORK_CONNECTION, true);
}
if (instance instanceof WebStorage) {
caps.setCapability(CapabilityType.SUPPORTS_WEB_STORAGE, true);
}
if (instance instanceof Rotatable) {
caps.setCapability(CapabilityType.ROTATABLE, true);
}
if (instance instanceof HasTouchScreen) {
caps.setCapability(CapabilityType.HAS_TOUCHSCREEN, true);
}
return caps.asMap();
}
@Override
public TouchScreen getTouch()
{
if (wrappedDriver instanceof HasTouchScreen)
{
return ((HasTouchScreen) wrappedDriver).getTouch();
}
throw new UnsupportedOperationException(ADVANCED_INTERACTION_NOT_SUPPORTED);
}
@Test
void testGetTouch()
{
WebDriver driverWithTouchScreen = Mockito.mock(WebDriver.class,
withSettings().extraInterfaces(HasTouchScreen.class));
TouchScreen touchScreen = Mockito.mock(TouchScreen.class);
when(((HasTouchScreen) driverWithTouchScreen).getTouch()).thenReturn(touchScreen);
assertEquals(touchScreen, new DelegatingWebDriver(driverWithTouchScreen).getTouch());
}
@Override
public TouchScreen getTouch()
{
setLastAction();
if ( webDriver instanceof HasTouchScreen )
return ((HasTouchScreen) webDriver).getTouch();
else
return null;
}
public boolean _moveTo()
{
WebElement webElement = getElement();
if (webElement != null && webElement.getSize().getHeight() > 0 && webElement.getSize().getWidth() > 0)
{
if (getWebDriver() instanceof HasInputDevices)
{
if (isTimed())
getActionProvider().startTimer((DeviceWebDriver) getWebDriver(), this, getExecutionContext());
if (((DeviceWebDriver) getWebDriver()).getNativeDriver() instanceof AppiumDriver)
{
new TouchAction((AppiumDriver) ((DeviceWebDriver) getWebDriver()).getNativeDriver()).moveTo(createPoint(webElement)).perform();
}
else if (((DeviceWebDriver) getWebDriver()).getNativeDriver() instanceof RemoteWebDriver)
{
if (((DeviceWebDriver) getWebDriver()).getNativeDriver() instanceof HasTouchScreen)
new TouchActions(getWebDriver()).moveToElement(webElement).build().perform();
else
new Actions(getWebDriver()).moveToElement(webElement).build().perform();
}
return true;
}
}
return false;
}
public boolean _press()
{
WebElement webElement = getElement();
if (webElement != null && webElement.getSize().getHeight() > 0 && webElement.getSize().getWidth() > 0)
{
if (getWebDriver() instanceof HasInputDevices)
{
if (isTimed())
getActionProvider().startTimer((DeviceWebDriver) getWebDriver(), this, getExecutionContext());
if (((DeviceWebDriver) getWebDriver()).getNativeDriver() instanceof AppiumDriver)
{
new TouchAction((AppiumDriver) ((DeviceWebDriver) getWebDriver()).getNativeDriver()).press(createPoint(webElement)).perform();
}
else if (((DeviceWebDriver) getWebDriver()).getNativeDriver() instanceof RemoteWebDriver)
{
if (((DeviceWebDriver) getWebDriver()).getNativeDriver() instanceof HasTouchScreen)
new TouchActions(getWebDriver()).clickAndHold(webElement).build().perform();
else
new Actions(getWebDriver()).clickAndHold(webElement).build().perform();
}
return true;
}
}
return false;
}
public boolean _mouseDoubleClick()
{
WebElement webElement = getElement();
if (webElement != null && webElement.getSize().getHeight() > 0 && webElement.getSize().getWidth() > 0)
{
if (getWebDriver() instanceof HasInputDevices)
{
if (isTimed())
getActionProvider().startTimer((DeviceWebDriver) getWebDriver(), this, getExecutionContext());
if (((DeviceWebDriver) getWebDriver()).getNativeDriver() instanceof AppiumDriver)
{
new TouchActions((AppiumDriver) ((DeviceWebDriver) getWebDriver()).getNativeDriver()).doubleTap(webElement).perform();
}
else if (((DeviceWebDriver) getWebDriver()).getNativeDriver() instanceof RemoteWebDriver)
{
if (((DeviceWebDriver) getWebDriver()).getNativeDriver() instanceof HasTouchScreen)
new TouchActions(getWebDriver()).doubleClick().build().perform();
else
new Actions(getWebDriver()).doubleClick(webElement).build().perform();
}
return true;
}
}
return false;
}
public boolean _release()
{
WebElement webElement = getElement();
if (webElement != null && webElement.getSize().getHeight() > 0 && webElement.getSize().getWidth() > 0)
{
if (getWebDriver() instanceof HasInputDevices)
{
if (isTimed())
getActionProvider().startTimer((DeviceWebDriver) getWebDriver(), this, getExecutionContext());
if (((DeviceWebDriver) getWebDriver()).getNativeDriver() instanceof AppiumDriver)
{
new TouchAction((AppiumDriver) ((DeviceWebDriver) getWebDriver()).getNativeDriver()).release().perform();
}
else if (((DeviceWebDriver) getWebDriver()).getNativeDriver() instanceof RemoteWebDriver)
{
if (((DeviceWebDriver) getWebDriver()).getNativeDriver() instanceof HasTouchScreen)
new TouchActions(getWebDriver()).release().build().perform();
else
new Actions(getWebDriver()).release().build().perform();
}
return true;
}
}
return false;
}
public TouchActions(WebDriver driver) {
super(driver);
if (driver instanceof HasTouchScreen) {
this.touchScreen = ((HasTouchScreen) driver).getTouch();
} else {
this.touchScreen = null;
}
}
@Override
public TouchScreen getTouch() {
if (driver instanceof HasTouchScreen) {
return new EventFiringTouch(driver, dispatcher);
}
throw new UnsupportedOperationException("Underlying driver does not implement advanced"
+ " user interactions yet.");
}
@Test
public void testInterfacesProxiedProperly() {
WebDriver actual = mock(WebDriver.class,
withSettings().extraInterfaces(HasTouchScreen.class));
final WebDriver webdriver = ThreadGuard.protect(actual);
HasTouchScreen hasTouchScreen = (HasTouchScreen) webdriver;
assertThat(hasTouchScreen).isNotNull();
}
@Override
public Void call() {
TouchScreen touchScreen = ((HasTouchScreen) getDriver()).getTouch();
WebElement element = getKnownElements().get(elementId);
Coordinates elementLocation = ((Locatable) element).getCoordinates();
touchScreen.singleTap(elementLocation);
return null;
}
@Override
public Void call() {
TouchScreen touchScreen = ((HasTouchScreen) getDriver()).getTouch();
touchScreen.down(x, y);
return null;
}
@Override
public Void call() {
TouchScreen touchScreen = ((HasTouchScreen) getDriver()).getTouch();
if (elementId != null) {
WebElement element = getKnownElements().get(elementId);
Coordinates elementLocation = ((Locatable) element).getCoordinates();
touchScreen.flick(elementLocation, xOffset, yOffset, speed);
} else {
touchScreen.flick(xSpeed, ySpeed);
}
return null;
}
@Override
public Void call() {
TouchScreen touchScreen = ((HasTouchScreen) getDriver()).getTouch();
touchScreen.up(x, y);
return null;
}
@Override
public Void call() {
TouchScreen touchScreen = ((HasTouchScreen) getDriver()).getTouch();
WebElement element = getKnownElements().get(elementId);
Coordinates elementLocation = ((Locatable) element).getCoordinates();
touchScreen.doubleTap(elementLocation);
return null;
}
@Override
public Void call() {
TouchScreen touchScreen = ((HasTouchScreen) getDriver()).getTouch();
WebElement element = getKnownElements().get(elementId);
Coordinates elementLocation = ((Locatable) element).getCoordinates();
touchScreen.longPress(elementLocation);
return null;
}
@Override
public Void call() {
TouchScreen touchScreen = ((HasTouchScreen) getDriver()).getTouch();
touchScreen.move(x, y);
return null;
}
@Override
public Void call() {
TouchScreen touchScreen = ((HasTouchScreen) getDriver()).getTouch();
if (elementId != null) {
WebElement element = getKnownElements().get(elementId);
Coordinates elementLocation = ((Locatable) element).getCoordinates();
touchScreen.scroll(elementLocation, xOffset, yOffset);
} else {
touchScreen.scroll(xOffset, yOffset);
}
return null;
}
public EventFiringTouch(WebDriver driver, WebDriverEventListener dispatcher) {
this.driver = driver;
this.dispatcher = dispatcher;
this.touchScreen = ((HasTouchScreen) this.driver).getTouch();
}
@Before
public void checkHasTouchScreen() {
assumeThat(driver).isInstanceOf(HasTouchScreen.class);
}