UNPKG

5.67 kBJavaScriptView Raw
1// Licensed to the Software Freedom Conservancy (SFC) under one
2// or more contributor license agreements. See the NOTICE file
3// distributed with this work for additional information
4// regarding copyright ownership. The SFC licenses this file
5// to you under the Apache License, Version 2.0 (the
6// "License"); you may not use this file except in compliance
7// with the License. You may obtain a copy of the License at
8//
9// http://www.apache.org/licenses/LICENSE-2.0
10//
11// Unless required by applicable law or agreed to in writing,
12// software distributed under the License is distributed on an
13// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14// KIND, either express or implied. See the License for the
15// specific language governing permissions and limitations
16// under the License.
17
18'use strict';
19
20var Browser = require('..').Browser,
21 By = require('..').By,
22 until = require('..').until,
23 assert = require('../testing/assert'),
24 error = require('../lib/error'),
25 test = require('../lib/test'),
26 Pages = test.Pages;
27
28
29test.suite(function(env) {
30 var browsers = env.browsers;
31
32 var driver;
33 test.before(function*() {
34 driver = yield env.builder().build();
35 });
36
37 test.beforeEach(function*() {
38 if (!driver) {
39 driver = yield env.builder().build();
40 }
41 });
42
43 test.after(function() {
44 if (driver) {
45 return driver.quit();
46 }
47 });
48
49 test.it('should wait for document to be loaded', function*() {
50 yield driver.get(Pages.simpleTestPage);
51 return assert(driver.getTitle()).equalTo('Hello WebDriver');
52 });
53
54 test.it('should follow redirects sent in the http response headers',
55 function*() {
56 yield driver.get(Pages.redirectPage);
57 return assert(driver.getTitle()).equalTo('We Arrive Here');
58 });
59
60 test.ignore(browsers(Browser.SAFARI)).
61 it('should follow meta redirects', function*() {
62 yield driver.get(Pages.metaRedirectPage);
63 return assert(driver.getTitle()).equalTo('We Arrive Here');
64 });
65
66 // Skip Firefox; see https://bugzilla.mozilla.org/show_bug.cgi?id=1280300
67 test.ignore(browsers(Browser.FIREFOX)).
68 it('should be able to get a fragment on the current page', function*() {
69 yield driver.get(Pages.xhtmlTestPage);
70 yield driver.get(Pages.xhtmlTestPage + '#text');
71 yield driver.findElement(By.id('id1'));
72 });
73
74 test.ignore(browsers(Browser.IPAD, Browser.IPHONE)).
75 it('should wait for all frames to load in a frameset', function*() {
76 yield driver.get(Pages.framesetPage);
77 yield driver.switchTo().frame(0);
78
79 let txt = yield driver.findElement(By.css('span#pageNumber')).getText();
80 assert(txt.trim()).equalTo('1');
81
82 yield driver.switchTo().defaultContent();
83 yield driver.switchTo().frame(1);
84 txt = yield driver.findElement(By.css('span#pageNumber')).getText();
85
86 assert(txt.trim()).equalTo('2');
87 });
88
89 test.ignore(browsers(Browser.SAFARI)).
90 it('should be able to navigate back in browser history', function*() {
91 yield driver.get(Pages.formPage);
92
93 yield driver.findElement(By.id('imageButton')).click();
94 yield driver.wait(until.titleIs('We Arrive Here'), 2500);
95
96 yield driver.navigate().back();
97 yield driver.wait(until.titleIs('We Leave From Here'), 2500);
98 });
99
100 test.ignore(browsers(Browser.SAFARI)).
101 it('should be able to navigate back in presence of iframes', function*() {
102 yield driver.get(Pages.xhtmlTestPage);
103
104 yield driver.findElement(By.name('sameWindow')).click();
105 yield driver.wait(until.titleIs('This page has iframes'), 2500);
106
107 yield driver.navigate().back();
108 yield driver.wait(until.titleIs('XHTML Test Page'), 2500);
109 });
110
111 test.ignore(browsers(Browser.SAFARI)).
112 it('should be able to navigate forwards in browser history', function*() {
113 yield driver.get(Pages.formPage);
114
115 yield driver.findElement(By.id('imageButton')).click();
116 yield driver.wait(until.titleIs('We Arrive Here'), 5000);
117
118 yield driver.navigate().back();
119 yield driver.wait(until.titleIs('We Leave From Here'), 5000);
120
121 yield driver.navigate().forward();
122 yield driver.wait(until.titleIs('We Arrive Here'), 5000);
123 });
124
125 // PhantomJS 2.0 does not properly reload pages on refresh.
126 test.ignore(browsers(Browser.PHANTOM_JS)).
127 it('should be able to refresh a page', function*() {
128 yield driver.get(Pages.xhtmlTestPage);
129
130 yield driver.navigate().refresh();
131
132 yield assert(driver.getTitle()).equalTo('XHTML Test Page');
133 });
134
135 test.it('should return title of page if set', function*() {
136 yield driver.get(Pages.xhtmlTestPage);
137 yield assert(driver.getTitle()).equalTo('XHTML Test Page');
138
139 yield driver.get(Pages.simpleTestPage);
140 yield assert(driver.getTitle()).equalTo('Hello WebDriver');
141 });
142
143 describe('timeouts', function() {
144 test.afterEach(function() {
145 let nullDriver = () => driver = null;
146 if (driver) {
147 return driver.quit().then(nullDriver, nullDriver);
148 }
149 });
150
151 // Only implemented in Firefox.
152 test.ignore(browsers(
153 Browser.CHROME,
154 Browser.IE,
155 Browser.IPAD,
156 Browser.IPHONE,
157 Browser.OPERA,
158 Browser.PHANTOM_JS)).
159 it('should timeout if page load timeout is set', function*() {
160 yield driver.manage().timeouts().pageLoadTimeout(1);
161 return driver.get(Pages.sleepingPage + '?time=3')
162 .then(function() {
163 throw Error('Should have timed out on page load');
164 }, function(e) {
165 if (!(e instanceof error.ScriptTimeoutError)
166 && !(e instanceof error.TimeoutError)) {
167 throw Error('Unexpected error response: ' + e);
168 }
169 });
170 });
171 });
172});