/* * Copyright 2012-2014 eBay Software Foundation and selendroid 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 io.selendroid.nativetests; import io.selendroid.client.waiter.TestWaiter; import io.selendroid.client.waiter.WaitingConditions; import io.selendroid.support.BaseAndroidTest; import org.junit.Assert; import org.junit.Ignore; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.Dimension; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.Point; import org.openqa.selenium.WebDriverException; import org.openqa.selenium.WebElement; import org.openqa.selenium.interactions.touch.TouchActions; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; public class NativeElementInteractionTest extends BaseAndroidTest { @Test public void shouldGetTextOfElement() { openStartActivity(); WebElement button = driver().findElement(By.id("waitingButtonTest")); Assert.assertEquals(button.getText(), "Show Progress Bar for a while"); } @Test() public void shouldClickOnElement() { openStartActivity(); WebElement button = driver().findElement(By.id("startUserRegistration")); button.click(); TestWaiter.waitFor(WaitingConditions.driverUrlToBe(driver(), "and-activity://RegisterUserActivity")); } @Test public void shouldGetAttributeOfTextField() { openStartActivity(); WebElement inputField = driver().findElement(By.id("my_text_field")); Assert.assertEquals(inputField.getAttribute("enabled"), "true"); } @Test public void shouldoGetTagName() { openStartActivity(); WebElement inputField = driver().findElement(By.id("my_text_field")); Assert.assertEquals(inputField.getTagName(), "EditText"); } @Test public void shouldGetAttributeOfButton() { openStartActivity(); WebElement button = driver().findElement(By.id("waitingButtonTest")); Assert.assertEquals(button.getAttribute("ContentDescription"), "waitingButtonTestCD"); Assert.assertEquals(button.getAttribute("text"), "Show Progress Bar for a while"); } @Test public void shouldSendKeysAndClearAnElement() { openStartActivity(); WebElement inputField = driver().findElement(By.id("my_text_field")); String text = "a.anyString@not.existent%.1.de"; inputField.sendKeys(text); Assert.assertEquals(inputField.getText(), text); inputField.clear(); Assert.assertEquals(inputField.getAttribute("text"), ""); } @Test public void shouldGetSelectedStateOfElement() { openStartActivity(); WebElement checkBox = driver().findElement(By.id("input_adds_check_box")); Assert.assertEquals(checkBox.isSelected(), true); checkBox.click(); Assert.assertEquals(checkBox.isSelected(), false); } /** * Based on the default test emulator used to verify build that has a resolution of 320x480 * pixels. */ @Test public void shouldGetSizeOfElement() { openStartActivity(); WebElement button = driver().findElement(By.id("waitingButtonTest")); Dimension dimension = button.getSize(); Assert.assertTrue("width should be >=48, but was " + dimension.height, dimension.height >= 48); Assert.assertTrue("width should be >=200, but was " + dimension.width, dimension.width >= 200); } /** * Based on the default test emulator used to verify build that has a resolution of 320x480 * pixels. */ @Test public void shouldGetLocationOfElement() { openStartActivity(); WebElement button = driver().findElement(By.id("waitingButtonTest")); Point location = button.getLocation(); Assert.assertEquals(location.x, 0); // this is not perfect but guarantees that it works on different screen sizes Assert.assertTrue(location.y >= 247); } @Test public void shouldExecuteSimpleJavaScript() { openStartActivity(); Object translatedText = ((JavascriptExecutor) driver()).executeScript("getL10nKeyTranslation", "button"); Assert.assertEquals(translatedText, "EN Button"); } @Test public void shouldGetDisplayedStateOfElement() { openStartActivity(); WebElement button = driver().findElement(By.id("waitingButtonTest")); Assert.assertEquals(button.isDisplayed(), true); } @Test public void shouldGetEnbledStateOfElement() { openStartActivity(); WebElement button = driver().findElement(By.id("waitingButtonTest")); Assert.assertEquals(button.isEnabled(), true); } @Test public void shouldSubmitAnElement() { openStartActivity(); WebElement button = driver().findElement(By.id("waitingButtonTest")); try { button.submit(); Assert.fail(); } catch (WebDriverException e) { Assert.assertTrue(e.getMessage().contains("Submit is not supported for native elements.")); } } @Test public void shouldLongPressOnElement() { openStartActivity(); WebElement button = driver().findElement(By.id("buttonTest")); TouchActions longPress = new TouchActions(driver()).longPress(button); longPress.perform(); WebElement text = driver().findElement(By.partialLinkText("Long Press Tap")); Assert.assertNotNull(text); // TODO ddary this is essential, not perfect. must be refactored driver().findElement(By.id("button1")).click(); } @Test public void shouldTapOnElement() { openStartActivity(); WebElement button = driver().findElement(By.id("buttonTest")); TouchActions longPress = new TouchActions(driver()).singleTap(button); longPress.perform(); WebElement text = driver().findElement(By.partialLinkText("end the activity")); Assert.assertNotNull(text); // TODO ddary this is essential, not perfect. must be refactored driver().findElement(By.id("button2")).click(); } @Test public void shouldGetWindowSize() { openStartActivity(); Dimension dim = driver().manage().window().getSize(); Assert.assertTrue(dim.getHeight() > 100); Assert.assertTrue(dim.getWidth() > 100); } @Test public void shoudlGetJapaneseText() { openStartActivity(); WebElement inputField = driver().findElement(By.id("encodingTextview")); Assert.assertEquals("パソコン版にする", inputField.getText()); } @Test @Ignore("Test is flaky. It sends the .click() while the app is still animating opening the registration screen") public void shouldScrollAndEnterText() { openStartActivity(); driver().findElement(By.id("startUserRegistration")).click(); new WebDriverWait(driver(), 5).until(ExpectedConditions.presenceOfElementLocated(By .id("inputUsername"))); WebElement acceptAddsCheckbox = driver().findElement(By.id("input_adds")); if (acceptAddsCheckbox.isSelected()) { acceptAddsCheckbox.click(); Assert.assertEquals(false, acceptAddsCheckbox.isSelected()); } else { acceptAddsCheckbox.click(); Assert.assertEquals(true, acceptAddsCheckbox.isSelected()); } } }