package org.uiautomation.ios.e2e.config;
import org.openqa.selenium.By;
import org.openqa.selenium.Capabilities;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.SessionNotCreatedException;
import org.openqa.selenium.WebDriverException;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import org.uiautomation.ios.BaseIOSDriverTest;
import org.uiautomation.ios.IOSCapabilities;
import org.uiautomation.ios.SampleApps;
import org.uiautomation.ios.UIAModels.Orientation;
import org.uiautomation.ios.client.uiamodels.impl.RemoteIOSDriver;
import org.uiautomation.ios.communication.device.DeviceType;
import org.uiautomation.ios.communication.device.DeviceVariation;
import org.uiautomation.ios.server.utils.IOSVersion;
import org.uiautomation.ios.utils.ClassicCommands;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.List;
import javax.imageio.ImageIO;
import static org.uiautomation.ios.IOSCapabilities.BUNDLE_NAME;
import static org.uiautomation.ios.IOSCapabilities.DEVICE;
import static org.uiautomation.ios.IOSCapabilities.LANGUAGE;
import static org.uiautomation.ios.IOSCapabilities.LOCALE;
public class NewSessionTest extends BaseIOSDriverTest {
@Test
public void base() {
RemoteIOSDriver driver = null;
try {
driver = new RemoteIOSDriver(getRemoteURL(), SampleApps.uiCatalogCap());
IOSCapabilities cap = IOSCapabilities.iphone("UICatalog", "2.10");
String sdk = cap.getSDKVersion();
if (sdk == null) {
sdk = ClassicCommands.getDefaultSDK();
}
IOSCapabilities actual = driver.getCapabilities();
Assert.assertEquals(actual.getBundleId(), "com.yourcompany.UICatalog");
Assert.assertEquals(actual.getBundleVersion(), "2.10");
Assert.assertEquals(actual.getSDKVersion(), sdk);
} finally {
if (driver != null) {
driver.quit();
}
}
}
@Test
public void noVersion() {
RemoteIOSDriver driver = null;
try {
driver = new RemoteIOSDriver(getRemoteURL(), SampleApps.uiCatalogCap());
IOSCapabilities actual = driver.getCapabilities();
Assert.assertEquals(actual.getBundleId(), "com.yourcompany.UICatalog");
Assert.assertEquals(actual.getBundleVersion(), "2.10");
} finally {
if (driver != null) {
driver.quit();
}
}
}
RemoteIOSDriver driver = null;
@Test
public void appWithNoContentCanStart() throws Exception {
try {
driver = new RemoteIOSDriver(getRemoteURL(), SampleApps.noContentCap());
IOSCapabilities actual = driver.getCapabilities();
Assert.assertEquals(actual.getBundleId(), "freynaud.testNoContent");
Assert.assertEquals(actual.getBundleVersion(), "1.0");
try {
driver.findElement(By.xpath("//*[@name=l10n('test')]"));
Assert.fail("cannot use l10n features on an app with no content.");
} catch (WebDriverException expected) {
// expected
}
} finally {
if (driver != null) {
driver.quit();
}
}
}
@Test
public void startDefaultLanguageLocale() {
RemoteIOSDriver driver = null;
try {
driver = new RemoteIOSDriver(getRemoteURL(), SampleApps.uiCatalogCap());
IOSCapabilities actual = driver.getCapabilities();
Assert.assertEquals(actual.getBundleId(), "com.yourcompany.UICatalog");
Assert.assertEquals(actual.getBundleVersion(), "2.10"); // default to UK
Assert.assertEquals(actual.getLanguage(), "en");
Assert.assertEquals(actual.getLocale(), "en_GB");
} finally {
if (driver != null) {
driver.quit();
}
}
}
@Test
public void startSpecifiedLanguageLocale() {
RemoteIOSDriver driver = null;
try {
IOSCapabilities cap = IOSCapabilities.iphone("InternationalMountains");
cap.setLanguage("fr");
cap.setLocale("es");
driver = new RemoteIOSDriver(getRemoteURL(), cap);
IOSCapabilities actual = driver.getCapabilities();
Assert.assertEquals(actual.getBundleId(), "com.yourcompany.InternationalMountains");
Assert.assertEquals(actual.getBundleVersion(), "1.1");
// default to UK Assert.assertEquals(target.getLanguage(), "fr");
Assert.assertEquals(actual.getLocale(), "es");
} finally {
if (driver != null) {
driver.quit();
}
}
}
// TODO freynaud should load english instead ?
@Test(expectedExceptions = SessionNotCreatedException.class)
public void recognizeUnsupportedLanguageLocale() {
RemoteIOSDriver driver = null;
try {
IOSCapabilities cap = IOSCapabilities.iphone("InternationalMountains");
cap.setLanguage("es");
cap.setLocale("es");
driver = new RemoteIOSDriver(getRemoteURL(), cap);
} finally {
if (driver != null) {
driver.quit();
}
}
}
@Test(expectedExceptions = SessionNotCreatedException.class)
public void doesntExist() {
RemoteIOSDriver driver = null;
try {
driver = new RemoteIOSDriver(getRemoteURL(), IOSCapabilities.iphone("ferret", "2.10"));
} finally {
if (driver != null) {
driver.quit();
}
}
}
@Test(expectedExceptions = SessionNotCreatedException.class)
public void sdkTooOld() {
RemoteIOSDriver driver = null;
try {
IOSCapabilities cap = SampleApps.uiCatalogCap();
cap.setSDKVersion("4.3");
driver = new RemoteIOSDriver(getRemoteURL(), cap);
} finally {
if (driver != null) {
driver.quit();
}
}
}
@Test(expectedExceptions = SessionNotCreatedException.class)
public void wrongVersion() {
RemoteIOSDriver driver = null;
try {
driver =
new RemoteIOSDriver(getRemoteURL(), IOSCapabilities.iphone("UICatalog", "not a number."));
} finally {
if (driver != null) {
driver.quit();
}
}
}
@Test(expectedExceptions = SessionNotCreatedException.class)
public void wrongSDK() {
RemoteIOSDriver driver = null;
try {
IOSCapabilities cap = IOSCapabilities.iphone("InternationalMountains");
cap.setSDKVersion("17");
driver = new RemoteIOSDriver(getRemoteURL(), cap);
} finally {
if (driver != null) {
driver.quit();
}
}
}
@Test
public void correctSDK() {
RemoteIOSDriver driver = null;
try {
IOSCapabilities cap = IOSCapabilities.iphone("InternationalMountains");
String sdk = ClassicCommands.getDefaultSDK();
cap.setSDKVersion(sdk);
driver = new RemoteIOSDriver(getRemoteURL(), cap);
IOSCapabilities actual = driver.getCapabilities();
Assert.assertEquals(actual.getSDKVersion(), sdk);
} finally {
if (driver != null) {
driver.quit();
}
}
}
@Test
public void supportAllInstalledSDKs() {
RemoteIOSDriver driver = null;
List<String> sdks = ClassicCommands.getInstalledSDKs();
for (String sdk : sdks) {
if (new IOSVersion(sdk).isGreaterOrEqualTo("5.0")) {
try {
IOSCapabilities cap = IOSCapabilities.iphone("InternationalMountains");
cap.setSDKVersion(sdk);
driver = new RemoteIOSDriver(getRemoteURL(), cap);
IOSCapabilities actual = driver.getCapabilities();
Assert.assertEquals(actual.getSDKVersion(), sdk);
} finally {
if (driver != null) {
driver.quit();
}
}
}
}
}
@Test
public void correctDevice() {
RemoteIOSDriver driver = null;
try {
IOSCapabilities cap = IOSCapabilities.iphone("UICatalog");
driver = new RemoteIOSDriver(getRemoteURL(), cap);
IOSCapabilities actual = driver.getCapabilities();
Assert.assertEquals(actual.getDevice(), DeviceType.iphone);
} finally {
if (driver != null) {
driver.quit();
}
}
try {
IOSCapabilities cap = IOSCapabilities.ipad("UICatalog");
driver = new RemoteIOSDriver(getRemoteURL(), cap);
IOSCapabilities actual = driver.getCapabilities();
Assert.assertEquals(actual.getDevice(), DeviceType.ipad);
} finally {
if (driver != null) {
driver.quit();
}
}
}
@Test
public void canUseAnyFlagFromInfoPlistMatches() {
IOSCapabilities cap = IOSCapabilities.iphone("UICatalog");
cap.setCapability(IOSCapabilities.MAGIC_PREFIX + "CFBundleDevelopmentRegion", "en");
RemoteIOSDriver driver = null;
try {
driver = new RemoteIOSDriver(getRemoteURL(), cap);
IOSCapabilities actual = driver.getCapabilities();
Assert.assertEquals(actual.getBundleId(), "com.yourcompany.UICatalog");
Assert.assertEquals(actual.getBundleVersion(), "2.10");
} finally {
if (driver != null) {
driver.quit();
}
}
}
@DataProvider(name = "capabilities")
public Object[][] createData1() {
return new Object[][]{
{DeviceType.iphone, DeviceVariation.Regular, 320, 480},
{DeviceType.iphone, DeviceVariation.Retina35, 640, 960},
{DeviceType.iphone, DeviceVariation.Retina4, 640, 1136},
{DeviceType.ipad, DeviceVariation.Regular, 768, 1024},
{DeviceType.ipad, DeviceVariation.Retina, 1536, 2048},
};
}
@Test(dataProvider = "capabilities")
public void supportApplicationWithMultipleDeviceFamily(DeviceType device,
DeviceVariation variation,
int expectedW,
int expectedH) throws Exception {
IOSCapabilities cap = new IOSCapabilities();
cap.setCapability(DEVICE, device);
cap.setDeviceVariation(variation);
cap.setCapability(LANGUAGE, "es");
cap.setCapability(LOCALE, "en_GB");
cap.setCapability(BUNDLE_NAME, "Safari");
// normal iphone
RemoteIOSDriver driver = null;
try {
driver = new RemoteIOSDriver(getRemoteURL(), cap);
Capabilities actual = driver.getCapabilities();
driver.switchTo().window("Web");
driver.get(getRemoteURL() + "/status");
for (Orientation o : Orientation.values()) {
if (o == Orientation.UIA_DEVICE_ORIENTATION_FACEUP
|| o == Orientation.UIA_DEVICE_ORIENTATION_FACEDOWN
|| (o == Orientation.UIA_DEVICE_ORIENTATION_PORTRAIT_UPSIDEDOWN
&& device == DeviceType.iphone)) {
continue;
}
driver.rotate(o);
}
Assert.assertEquals(actual.getCapability(DEVICE), device.toString());
File f = driver.getScreenshotAs(OutputType.FILE);
BufferedImage bimg = ImageIO.read(f);
Assert.assertTrue(bimg.getWidth() == expectedW || bimg.getHeight() == expectedW);
Assert.assertTrue(bimg.getWidth() == expectedH || bimg.getHeight() == expectedH);
} finally {
if (driver != null) {
driver.quit();
}
}
}
}