/** * Switches contexts * * @param name Name of the context to switch to * @return Reference of a web driver with a new context */ public WebDriver context(String name) { return this.driver.context(name); }
@Ignore @Test public void whenIOSHybridAppIsLaunched() { assertTrue(check(serverAppCapabilitiesSupplier, appFileSupplierFunction.apply(webViewApp), (by, aClass) -> { new WebDriverWait(driver, 30) .until(ExpectedConditions.presenceOfElementLocated(id("login"))) .click(); driver.findElementByAccessibilityId("webView").click(); new WebDriverWait(driver, 30) .until(ExpectedConditions .presenceOfElementLocated(AccessibilityId("Webview"))); try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } driver.getContextHandles().forEach((handle) -> { if (handle.contains("WEBVIEW")) { driver.context(handle); } }); return commonPredicate.test(by, aClass); }, partialLinkText("login"), IOSElement.class)); }
@Test public void whenAndroidHybridAppIsLaunched() { assertTrue(check(serverCapabilitiesSupplier, () -> { DesiredCapabilities clientCapabilities = new DesiredCapabilities(); clientCapabilities.setCapability(AndroidMobileCapabilityType.APP_PACKAGE, "io.appium.android.apis"); clientCapabilities.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY, ".view.WebView1"); return clientCapabilities; }, (by, aClass) -> { driver.context("WEBVIEW_io.appium.android.apis"); return commonPredicate.test(by, aClass); }, tagName("a"), AndroidElement.class)); }
public void captureScreenshot(String methodName) { try { new File(screenshotDirectory).mkdirs(); String filename = methodName + ".png"; AppiumDriver webDriver = (AppiumDriver) webDriverService.getWebDriver(); webDriver.context("NATIVE_APP"); File screenshot = ((TakesScreenshot) webDriver).getScreenshotAs(OutputType.FILE); FileUtils.copyFile(screenshot, new File(screenshotDirectory + filename)); } catch (Exception e) { System.out.println(e.toString()); } } };
AppiumDriver appiumDriver = new AppiumDriver(); String originalContext = appiumDriver.getContext(); Point coordinate = element.getLocation(); Dimension loc = element.getSize(); int centerX = loc.getWidth() / 2 + coordinate.getX(); int centerY = loc.getHeight() / 2 + coordinate.getY(); appiumDriver.context("NATIVE_APP"); appiumDriver.tap(1, centerX, centerY, 2); appiumDriver.context(originalContext);
private void tapElement(AppiumDriver appiumDriver, WebElement element) { // Locate center of element Point location = element.getLocation(); Dimension size = element.getSize(); int tapX = location.getX() + (size.getWidth() / 2); int tapY = location.getY() + (size.getHeight() / 2); // Execute tap String originalContext = appiumDriver.getContext(); appiumDriver.context("NATIVE_APP"); TouchAction action = new TouchAction(appiumDriver); action.tap(tapX, tapY).perform(); appiumDriver.context(originalContext); }
public void swipeLeft() { AppiumDriver appiumDriver = (AppiumDriver) driver; appiumDriver.context("NATIVE_APP"); Dimension size = appiumDriver.manage().window().getSize(); int startx = (int) (size.width * 0.8); int endx = (int) (size.width * 0.20); int starty = size.height / 2; appiumDriver.swipe(startx, starty, endx, starty, 1000); }
public void swipeRight() { AppiumDriver appiumDriver = (AppiumDriver) driver; appiumDriver.context("NATIVE_APP"); Dimension size = appiumDriver.manage().window().getSize(); int endx= (int) (size.width * 0.8); int startx = (int) (size.width * 0.20); int starty = size.height / 2; appiumDriver.swipe(startx, starty, endx, starty, 1000); }
/** * Changes context if Appium driver is in use * * @param webDriver instance */ private void prepareScreenshot(WebDriver webDriver) { try { if (webDriver instanceof ClosingAwareWebDriverWrapper && ((ClosingAwareWebDriverWrapper) webDriver) .getWrappedDriver() instanceof AppiumDriver) { AppiumDriver appiumDriver = (AppiumDriver) ((ClosingAwareWebDriverWrapper) webDriver).getWrappedDriver(); String originalContext = appiumDriver.getContext(); appiumDriver.context(NATIVE_APP_CONTEXT); takeScreenshot(webDriver); appiumDriver.context(originalContext); } else { takeScreenshot(webDriver); } } catch (IOException e) { LOG.error("Can't take screenshot", e); } }
/** * Changes context if Appium driver is in use * * @param webDriver instance */ private void prepareScreenshot(WebDriver webDriver) { try { if (webDriver instanceof ClosingAwareWebDriverWrapper && ((ClosingAwareWebDriverWrapper) webDriver) .getWrappedDriver() instanceof AppiumDriver) { AppiumDriver appiumDriver = (AppiumDriver) ((ClosingAwareWebDriverWrapper) webDriver).getWrappedDriver(); String originalContext = appiumDriver.getContext(); appiumDriver.context(NATIVE_APP_CONTEXT); takeScreenshot(webDriver); appiumDriver.context(originalContext); } else { takeScreenshot(webDriver); } } catch (IOException e) { LOG.error("Can't take screenshot", e); } }
((AppiumDriver) webDriver).context(MobileDriver.NATIVE_CONTEXT); } else {
@Test void testWithAndroid(AppiumDriver<WebElement> android) { String context = android.getContext(); android.context("NATIVE_APP"); android.findElement(By.id("com.android.chrome:id/terms_accept")) .click(); android.findElement(By.id("com.android.chrome:id/negative_button")) .click(); android.context(context); android.get("https://bonigarcia.github.io/selenium-jupiter/"); assertTrue(android.getTitle().contains("JUnit 5 extension")); }
@Test void testWithAndroid(AppiumDriver<WebElement> android) { String context = android.getContext(); android.context("NATIVE_APP"); android.findElement(By.id("com.android.chrome:id/terms_accept")) .click(); android.findElement(By.id("com.android.chrome:id/negative_button")) .click(); android.context(context); android.get("https://bonigarcia.github.io/selenium-jupiter/"); assertTrue(android.getTitle().contains("JUnit 5 extension")); }
driver.context(webContext); Assert.assertNotEquals(driver.getTitle(), title); driver.context("NATIVE_APP"); input.sendKeys("https://google.com"); WebElement navigate = driver.findElement(navigateBtn); driver.context(webContext); wait.until(ExpectedConditions.titleIs(title)); } catch (InterruptedException ign) {
public static WebElement findElement( AppiumDriver<?> driver, UiElement uiElement ) { // switch the context if needed String context = getElementContext(uiElement); if (context != null && !context.equals(driver.getContext())) { driver.context(context); } // find the element if (uiElement.getElementProperty("xpath") != null) { return driver.findElement(By.xpath(uiElement.getElementProperty("xpath"))); } else if (uiElement.getElementProperty("id") != null) { return driver.findElement(By.id(uiElement.getElementProperty("id"))); } else if (uiElement.getElementProperty("name") != null) { return driver.findElement(By.name(uiElement.getElementProperty("name"))); } else if (uiElement.getElementProperty("text") != null) { return driver.findElement(By.linkText(uiElement.getElementProperty("text"))); } else if (uiElement.getElementProperty("partialText") != null) { return driver.findElement(By.partialLinkText(uiElement.getElementProperty("partialText"))); } return null; }
/** * Checks if web description is loaded. * * Note: Will fail if Android version is < 4.4 or >= 6.0. Hybrid views are not compatible with * versions < 4.4 and Appium context switching is currently buggy on devices running versions >= 6.0. * * @return true if it is, else false. */ public boolean webDescriptionIsLoaded() throws InterruptedException { Object[] contextHandles = driver.getContextHandles().toArray(); String androidVersion = driver.getCapabilities().getCapability("platformVersion").toString(); if (versionLessThan(androidVersion, "4.4")) { return true; } else if (versionGreaterThanOrEqual(androidVersion, "6.0")) { return false; } String webViewContent = (String) contextHandles[contextHandles.length - 1]; WebDriver webDriver = driver.context(webViewContent); try { WebDriverWait wait = new WebDriverWait(webDriver, MAX_WEBSITE_LOAD_TIME); wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(WEB_HEADER_CSS_NAME))); wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(WEB_HEADER_CSS_NAME))); } catch (TimeoutException e) { return false; // MAX_WEBSITE_LOAD_TIME timeout exceeded - bad internet connection. } WebElement webHeader = webDriver.findElement(By.cssSelector(WEB_HEADER_CSS_NAME)); return webHeader.isDisplayed(); }
driver.context(NATIVE_CONTEXT); this.screenDimensions = driver.manage().window().getSize(); // must be called in NATIVE context