Add a test harness for running UI tests on the iOS Simulator
[WebKit-https.git] / Tools / MobileMiniBrowser / MobileMiniBrowserUITests / MobileMiniBrowserUITests.m
1 /*
2  * Copyright (C) 2016 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #import <XCTest/XCTest.h>
27 #import <XCTest/XCUIRemote.h>
28
29 @interface MobileMiniBrowserUITests : XCTestCase
30
31 @end
32
33 @implementation MobileMiniBrowserUITests
34
35 - (void)setUp
36 {
37     [super setUp];
38
39     self.continueAfterFailure = NO;
40
41     XCUIApplication *app = [[XCUIApplication alloc] init];
42     [app launch];
43 }
44
45 - (void)tearDown
46 {
47     [super tearDown];
48 }
49
50 - (void)testBasicVideoPlayback
51 {
52     XCUIApplication *app = [[XCUIApplication alloc] init];
53     NSPredicate *exists = [NSPredicate predicateWithFormat:@"exists == 1"];
54
55     XCUIElement *urlField = app.textFields[@"URL Field"];
56     [self expectationForPredicate:exists evaluatedWithObject:urlField handler:nil];
57     [self waitForExpectationsWithTimeout:5.0 handler:nil];
58     [urlField tap];
59
60     XCUIElement *clearButton = urlField.buttons[@"Clear text"];
61     if (clearButton.exists)
62         [clearButton tap];
63     [urlField typeText:@"http://test-safari.apple.com/"];
64     [app.buttons[@"Go To URL"] tap];
65
66     XCUIElement *captions = app.links[@"Captions"];
67     [self expectationForPredicate:exists evaluatedWithObject:captions handler:nil];
68     [self waitForExpectationsWithTimeout:5.0 handler:nil];
69     [captions tap];
70
71     XCUIElement *viewInPage = app.links[@"Video in page"];
72     [self expectationForPredicate:exists evaluatedWithObject:viewInPage handler:nil];
73     [self waitForExpectationsWithTimeout:5.0 handler:nil];
74     [viewInPage tap];
75
76     XCUIElement *startPlayback = app.buttons[@"Start Playback"];
77     [self expectationForPredicate:exists evaluatedWithObject:startPlayback handler:nil];
78     [self waitForExpectationsWithTimeout:5.0 handler:nil];
79     [startPlayback tap];
80
81     UIUserInterfaceIdiom idiom = UI_USER_INTERFACE_IDIOM();
82     if (idiom == UIUserInterfaceIdiomPhone) {
83         XCUIElement *pauseButton = app.buttons[@"PauseButton"];
84         [self expectationForPredicate:exists evaluatedWithObject:pauseButton handler:nil];
85         [self waitForExpectationsWithTimeout:5.0 handler:nil];
86         [pauseButton tap];
87
88         XCUIElement *doneButton = app.buttons[@"Done"];
89         [self expectationForPredicate:exists evaluatedWithObject:doneButton handler:nil];
90         [self waitForExpectationsWithTimeout:5.0 handler:nil];
91         [doneButton tap];
92     } else if (idiom == UIUserInterfaceIdiomPad) {
93         XCUIElement *pauseButton = app.buttons[@"Pause"];
94         [self expectationForPredicate:exists evaluatedWithObject:pauseButton handler:nil];
95         [self waitForExpectationsWithTimeout:5.0 handler:nil];
96         [pauseButton tap];
97     }
98 }
99
100 @end