Java tutorial
/* * Copyright 2013 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 Licence 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.selenium; import org.apache.commons.io.FileUtils; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.Keys; import org.openqa.selenium.NoSuchElementException; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.ui.ExpectedCondition; import org.openqa.selenium.support.ui.WebDriverWait; import org.testng.annotations.Test; import org.uiautomation.ios.IOSCapabilities; import org.uiautomation.ios.client.uiamodels.impl.augmenter.Configurable; import org.uiautomation.ios.client.uiamodels.impl.augmenter.IOSDriverAugmenter; import org.uiautomation.ios.communication.WebDriverLikeCommand; import java.io.File; import java.io.IOException; import java.util.concurrent.TimeUnit; import static org.openqa.selenium.TestWaiter.waitFor; import static org.openqa.selenium.WaitingConditions.pageTitleToBe; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; import static org.testng.Assert.fail; public class FormHandlingTest extends BaseSeleniumTest { private static final String AUXILIARY_KEYS = "-/:;()$&@\".,?!'[]{}#%^*+=_\\|~<>?i?????c?CeE"; @Test public void testShouldClickOnSubmitInputElements() { driver.get(pages.formPage); driver.findElement(By.id("submitButton")).click(); waitFor(pageTitleToBe(driver, "We Arrive Here")); assertEquals(driver.getTitle(), ("We Arrive Here")); } @Test public void testClickingOnUnclickableElementsDoesNothing() { driver.get(pages.formPage); try { driver.findElement(By.xpath("//body")).click(); } catch (Exception e) { e.printStackTrace(); fail("Clicking on the unclickable should be a no-op"); } } // @Ignore(value = ANDROID, reason = // "The page is zoomed in because of the previous state" // + "which causes the click to fail.") @Test public void testShouldBeAbleToClickImageButtons() { driver.get(pages.formPage); driver.findElement(By.id("imageButton")).click(); waitFor(pageTitleToBe(driver, "We Arrive Here")); assertEquals(driver.getTitle(), ("We Arrive Here")); } @Test public void testShouldBeAbleToSubmitForms() { driver.get(pages.formPage); driver.findElement(By.name("login")).submit(); waitFor(pageTitleToBe(driver, "We Arrive Here")); } @Test public void testShouldSubmitAFormWhenAnyInputElementWithinThatFormIsSubmitted() { driver.get(pages.formPage); driver.findElement(By.id("checky")).submit(); waitFor(pageTitleToBe(driver, "We Arrive Here")); } @Test public void testShouldSubmitAFormWhenAnyElementWihinThatFormIsSubmitted() { driver.get(pages.formPage); driver.findElement(By.xpath("//form/p")).submit(); waitFor(pageTitleToBe(driver, "We Arrive Here")); } @Test(expectedExceptions = NoSuchElementException.class) public void testShouldNotBeAbleToSubmitAFormThatDoesNotExist() { driver.get(pages.formPage); driver.findElement(By.name("there is no spoon")).submit(); fail("Should not have succeeded"); } @Test // @Ignore(OPERA_MOBILE) public void testShouldBeAbleToEnterTextIntoATextAreaBySettingItsValue() { driver.get(pages.javascriptPage); WebElement textarea = driver.findElement(By.id("keyUpArea")); String cheesy = "brie and cheddar"; textarea.sendKeys(cheesy); assertEquals(textarea.getAttribute("value"), cheesy); assertEquals(driver.findElement(By.id("result")).getText(), cheesy); } // @Ignore(value = { ANDROID, OPERA_MOBILE }, reason = // "Android: capitalization bug in ICS keeps caps on after a capital letter is sent") @Test public void testSendKeysKeepsCapitalization() throws InterruptedException { driver.get(pages.javascriptPage); WebElement textarea = driver.findElement(By.id("keyUpArea")); String cheesey = "BrIe And CheDdar"; textarea.sendKeys(cheesey); assertEquals(textarea.getAttribute("value"), (cheesey)); } // @Ignore(value = { SELENESE, IPHONE, ANDROID, OPERA_MOBILE }) @Test(enabled = false) public void testShouldSubmitAFormUsingTheNewlineLiteral() { driver.get(pages.formPage); WebElement nestedForm = driver.findElement(By.id("nested_form")); WebElement input = nestedForm.findElement(By.name("x")); input.sendKeys("\n"); waitFor(pageTitleToBe(driver, "We Arrive Here")); assertTrue(driver.getCurrentUrl().endsWith("?x=name")); } // @Ignore({ SELENESE, IPHONE, ANDROID, OPERA_MOBILE }) @Test(enabled = false) public void testShouldSubmitAFormUsingTheEnterKey() { driver.get(pages.formPage); WebElement nestedForm = driver.findElement(By.id("nested_form")); WebElement input = nestedForm.findElement(By.name("x")); input.sendKeys(Keys.ENTER); waitFor(pageTitleToBe(driver, "We Arrive Here")); assertTrue(driver.getCurrentUrl().endsWith("?x=name")); } @Test public void testShouldEnterDataIntoFormFields() { driver.get(pages.xhtmlTestPage); WebElement element = driver.findElement(By.xpath("//form[@name='someForm']/input[@id='username']")); String originalValue = element.getAttribute("value"); assertEquals(originalValue, ("change")); element.clear(); element.sendKeys("some text"); element = driver.findElement(By.xpath("//form[@name='someForm']/input[@id='username']")); String newFormValue = element.getAttribute("value"); assertEquals(newFormValue, ("some text")); } // @Ignore(value = { SELENESE, IPHONE, ANDROID, SAFARI, OPERA, OPERA_MOBILE }, // reason = "Does not yet support file uploads", issues = { 4220 }) @Test(enabled = false) public void testShouldBeAbleToAlterTheContentsOfAFileUploadInputElement() throws IOException { driver.get(pages.formPage); WebElement uploadElement = driver.findElement(By.id("upload")); assertEquals(uploadElement.getAttribute("value"), ("")); File file = File.createTempFile("test", "txt"); file.deleteOnExit(); uploadElement.sendKeys(file.getAbsolutePath()); String uploadPath = uploadElement.getAttribute("value"); assertTrue(uploadPath.endsWith(file.getName())); } // will add a picture in the default "saved picture" album. public void addPictures() { File folder = new File( "/Users/freynaud/Library/Application Support/iPhone Simulator/6.0/Media/DCIM/100APPLE/"); File image = new File("/Users/freynaud/image.png"); File plistFolder = new File( "/Users/freynaud/Library/Application Support/iPhone Simulator/6.0/Media/PhotoData/MISC"); File plist = new File("/Users/freynaud/DCIM_APPLE.plist"); try { File dest = new File(folder, "image.png"); FileUtils.copyFile(image, dest); dest = new File(plistFolder, "DCIM_APPLE.plist"); FileUtils.copyFile(plist, dest); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // @Ignore(value = { ANDROID, IPHONE, OPERA, SAFARI, SELENESE, OPERA_MOBILE }, // reason = "Does not yet support file uploads", issues = { 4220 }) @Test(enabled = false) public void testShouldBeAbleToSendKeysToAFileUploadInputElementInAnXhtmlDocument() throws IOException { // IE before 9 doesn't handle pages served with an XHTML content type, and // just prompts for to // download it // assumeTrue(!TestUtilities.isInternetExplorer(driver) || // !TestUtilities.isOldIe(driver)); driver.get(pages.xhtmlFormPage); addPictures(); WebElement uploadElement = driver.findElement(By.id("file")); assertEquals(uploadElement.getAttribute("value"), ("")); File file = File.createTempFile("test", "txt"); file.deleteOnExit(); uploadElement.sendKeys(file.getAbsolutePath()); String uploadPath = uploadElement.getAttribute("value"); assertTrue(uploadPath.endsWith(file.getName())); } // @Ignore(value = { SELENESE, IPHONE, ANDROID, OPERA, SAFARI }, reason = // "Does not yet support file uploads", issues = { 4220 }) @Test(enabled = false) public void testShouldBeAbleToUploadTheSameFileTwice() throws IOException { File file = File.createTempFile("test", "txt"); file.deleteOnExit(); driver.get(pages.formPage); WebElement uploadElement = driver.findElement(By.id("upload")); assertEquals(uploadElement.getAttribute("value"), ("")); uploadElement.sendKeys(file.getAbsolutePath()); uploadElement.submit(); driver.get(pages.formPage); uploadElement = driver.findElement(By.id("upload")); assertEquals(uploadElement.getAttribute("value"), ("")); uploadElement.sendKeys(file.getAbsolutePath()); uploadElement.submit(); // If we get this far, then we're all good. } // @Ignore(value = { IPHONE, OPERA }, reason = // "iPhone: sendKeys implemented incorrectly.") @Test // doesn't work if the text is longer than the input size, as the cursor will // end up where the tap was done. public void testSendingKeyboardEventsShouldAppendTextInInputs() { driver.get(pages.formPage); WebElement element = driver.findElement(By.id("working")); element.sendKeys("some"); String value = element.getAttribute("value"); assertEquals(value, ("some")); element.sendKeys(" text"); value = element.getAttribute("value"); assertEquals(value, ("some text")); } @Test // doesn't work if the text is longer than the input size, as the cursor will // end up where the tap was done. public void testShouldScrollWhenZoomed() throws InterruptedException { driver.get(pages.formPage); WebElement element = driver.findElement(By.id("email")); element.sendKeys("ios@ios.com"); element = driver.findElement(By.id("vsearchGadget")); element.sendKeys("test"); } // @Ignore(value = { ANDROID, IPHONE, OPERA, SELENESE, OPERA_MOBILE }, reason // = "iPhone: sendKeys implemented incorrectly. Selenium: just because") @Test public void testSendingKeyboardEventsShouldAppendTextInInputsWithExistingValue() { driver.get(pages.formPage); WebElement element = driver.findElement(By.id("inputWithText")); element.sendKeys(". Some text"); String value = element.getAttribute("value"); assertEquals(value, ("Example text. Some text")); } // @Ignore(value = { SELENESE, IPHONE, ANDROID, OPERA_MOBILE }, reason = // "Not implemented going to the end of the line first;\n" // + "iPhone: sendKeys not implemented correctly") @Test //(invocationCount = 10) public void testSendingKeyboardEventsShouldAppendTextinTextAreas() throws InterruptedException { driver.get(pages.formPage); ; WebElement element = driver.findElement(By.id("withText")); element.sendKeys(". Some text"); String value = element.getAttribute("value"); assertEquals(value, ("Example text. Some text")); } @Test public void testShouldBeAbleToClearTextFromInputElements() { driver.get(pages.formPage); WebElement element = driver.findElement(By.id("working")); element.sendKeys("Some text"); String value = element.getAttribute("value"); assertTrue(value.length() > 0); element.clear(); value = element.getAttribute("value"); assertEquals(value.length(), (0)); } @Test public void testEmptyTextBoxesShouldReturnAnEmptyStringNotNull() { driver.get(pages.formPage); WebElement emptyTextBox = driver.findElement(By.id("working")); assertEquals(emptyTextBox.getAttribute("value"), ""); } @Test public void testShouldBeAbleToClearTextFromTextAreas() { driver.get(pages.formPage); WebElement element = driver.findElement(By.id("withText")); element.sendKeys("Some text"); String value = element.getAttribute("value"); assertTrue(value.length() > 0); element.clear(); value = element.getAttribute("value"); assertEquals(value.length(), (0)); } @Test public void testIsSelectedShouldWorkRightAfterSelecting() { driver.get(pages.formPage); WebElement checkbox = driver.findElement(By.id("checky")); driver.manage().timeouts().implicitlyWait(100, TimeUnit.MILLISECONDS); checkbox.click(); assertTrue(checkbox.isSelected()); } @Test(enabled = false) // @Ignore(value = { ANDROID, CHROME, HTMLUNIT, IE, IPHONE, OPERA, SAFARI, // SELENESE, OPERA_MOBILE }, reason = // "Untested on all other browsers, fails on chrome, fails on IE.", issues = { // 3508 }) public void handleFormWithJavascriptAction() { String url = appServer.whereIs("form_handling_js_submit.html"); driver.get(url); WebElement element = driver.findElement(By.id("theForm")); element.submit(); Alert alert = driver.switchTo().alert(); String text = alert.getText(); alert.dismiss(); assertEquals("Tasty cheese", text); } @Test public void testFillDateInput() { driver.get(appServer.whereIs("dateElement.html")); WebElement el = driver.findElement(By.id("dateInput")); el.sendKeys("2012-01-01"); assertEquals("2012-01-01", el.getAttribute("value")); } @Test public void testShouldBeAbleToSendKeysFromAuxiliaryKeyboard() { driver.get(pages.formPage); WebElement input = driver.findElement(By.id("working")); input.clear(); input.sendKeys(AUXILIARY_KEYS); assertEquals(AUXILIARY_KEYS, input.getAttribute("value")); } @Test public void testShouldBeAbleToSendKeysFromAuxiliaryKeyboardWithOutNativeEvents() { Configurable c = IOSDriverAugmenter.augment(driver); c.setConfiguration(WebDriverLikeCommand.SET_VALUE, "nativeEvents", false); driver.get(pages.formPage); WebElement input = driver.findElement(By.id("working")); input.sendKeys("1-800-FLOWERS"); assertEquals("1-800-FLOWERS", input.getAttribute("value")); input.clear(); input.sendKeys(AUXILIARY_KEYS); assertEquals(AUXILIARY_KEYS, input.getAttribute("value")); } @Test public void testCanEnterPhoneNumberIntoTELinput() { driver.get(pages.formPage); String stringyNumber = "1-800-FLOWERS"; String numberNumber = "18003569377"; String validationNumber = null; // iphone has number trackpad, ipad is has full keyboard still if (driver.getCapabilities().getCapability(IOSCapabilities.DEVICE).equals("iphone")) { validationNumber = numberNumber; } else { validationNumber = stringyNumber; } WebElement input = driver.findElement(By.id("telephone")); input.sendKeys(stringyNumber); assertEquals(input.getAttribute("value"), validationNumber); } @Test public void testCanUseEnterKeyToSubmitForm() { driver.get(pages.formPage); WebElement element = driver.findElement(By.cssSelector("#nested_form input[type='text']")); final String curURL = driver.getCurrentUrl(); element.sendKeys("something" + Keys.ENTER); new WebDriverWait(driver, 3).until(new ExpectedCondition<Boolean>() { @Override public Boolean apply(WebDriver webDriver) { return !webDriver.getCurrentUrl().equals(curURL); } }); assertTrue(driver.getCurrentUrl().endsWith("something")); } @Test public void testCanUseReturnKeyToSubmitForm() { driver.get(pages.formPage); WebElement element = driver.findElement(By.cssSelector("#nested_form input[type='text']")); final String curURL = driver.getCurrentUrl(); element.sendKeys("something" + Keys.RETURN); new WebDriverWait(driver, 3).until(new ExpectedCondition<Boolean>() { @Override public Boolean apply(WebDriver webDriver) { return !webDriver.getCurrentUrl().equals(curURL); } }); assertTrue(driver.getCurrentUrl().endsWith("something")); } }