blob: 3139c7cb24054f4bfb29700a3d1ccf750cb60972 [file] [log] [blame]
library webdriver_test.web_driver;
import 'package:unittest/unittest.dart';
import 'package:webdriver/webdriver.dart';
import '../test_util.dart';
void main() {
group('WebDriver', () {
group('create', () {
test('default', () {
WebDriver driver;
return WebDriver.createDriver()
.then((_driver) {
driver = _driver;
})
.then((_) => driver.get('http://www.google.com'))
.then((_) => driver.findElement(new By.name('q')))
.then((element) => element.name)
.then((name) {
expect(name, 'input');
return driver.quit();
});
});
test('chrome', () {
WebDriver driver;
return WebDriver
.createDriver(desiredCapabilities: Capabilities.chrome)
.then((_driver) {
driver = _driver;
})
.then((_) => driver.get('http://www.google.com'))
.then((_) => driver.findElement(new By.name('q')))
.then((element) => element.name)
.then((name) {
expect(name, 'input');
return driver.quit();
});
});
test('firefox', () {
WebDriver driver;
return WebDriver
.createDriver(desiredCapabilities: Capabilities.firefox)
.then((_driver) {
driver = _driver;
})
.then((_) => driver.get('http://www.google.com'))
.then((_) => driver.findElement(new By.name('q')))
.then((element) => element.name)
.then((name) {
expect(name, 'input');
return driver.quit();
});
});
});
group('methods', () {
WebDriver driver;
setUp(() {
return WebDriver
.createDriver(desiredCapabilities: Capabilities.chrome)
.then((_driver) => driver = _driver)
.then((_) => driver.get(testPagePath));
});
tearDown(() => driver.quit());
test('get', () {
return driver.get('http://www.google.com')
.then((_) => driver.findElement(new By.name('q')))
.then((_) => driver.get('http://www.yahoo.com'))
.then((_) => driver.findElement(new By.name('p')));
});
test('currentUrl', () {
return driver.currentUrl.then((url) {
expect(url, startsWith('file:'));
expect(url, endsWith('test_page.html'));
return driver.get('http://www.google.com');
})
.then((_) => driver.currentUrl)
.then((url) {
expect(url, contains('www.google.com'));
});
});
test('findElement -- success', () {
driver.findElement(new By.tagName('tr'))
.then(expectAsync1((element) {
expect(element, isWebElement);
}));
});
test('findElement -- failure', () {
return driver.findElement(new By.id('non-existent-id'))
.catchError((error) {
expect(error, isWebDriverError);
});
});
test('findElements -- 1 found', () {
return driver.findElements(new By.cssSelector('input[type=text]'))
.then((elements) {
expect(elements, hasLength(1));
expect(elements, everyElement(isWebElement));
});
});
test('findElements -- 4 found', () {
return driver.findElements(new By.tagName('td'))
.then((elements) {
expect(elements, hasLength(4));
expect(elements, everyElement(isWebElement));
});
});
test('findElements -- 0 found', () {
return driver.findElements(new By.id('non-existent-id'))
.then((elements) {
expect(elements, isEmpty);
});
});
test('pageSource', () {
return driver.pageSource.then((source) {
expect(source, contains('<title>test_page</title>'));
});
});
test('close/windowHandles', () {
int numHandles;
return driver.windowHandles
.then((handles) => numHandles = handles.length)
.then((_) =>
driver.findElement(new By.partialLinkText('Open copy')))
.then((element) => element.click())
.then((_) => driver.close())
.then((_) => driver.windowHandles)
.then((handles) {
expect(handles, hasLength(numHandles));
});
});
test('windowHandle', () {
String origHandle;
String newHandle;
return driver.windowHandle
.then((_handle) => origHandle = _handle)
.then((_) =>
driver.findElement(new By.partialLinkText('Open copy')))
.then((element) => element.click())
.then((_) => driver.windowHandles)
.then((handles) {
for (String aHandle in handles) {
if (aHandle != origHandle) {
newHandle = aHandle;
return driver.switchTo.window(aHandle);
}
}
})
.then((_) => driver.windowHandle)
.then((finalHandle) {
expect(finalHandle, newHandle);
});
});
// TODO(DrMarcII): Figure out why this doesn't pass
// test('activeElement', () {
// return driver.activeElement
// .then((element) {
// expect(element, isNull);
// return driver
// .findElement(new By.cssSelector('input[type=text]'));
// })
// .then((element) => element.click())
// .then((_) => driver.activeElement)
// .then((element) => element.name)
// .then((name) {
// expect(name, 'input');
// });
// });
test('windows', () {
return driver.windows.then((windows) {
expect(windows, hasLength(isPositive));
expect(windows, everyElement(new isInstanceOf<Window>()));
});
});
test('execute', () {
WebElement button;
String script = '''
arguments[1].textContent = arguments[0];
return arguments[1];''';
return driver.findElement(new By.tagName('button'))
.then((_e) => button = _e)
.then((_) => driver.execute(script, ['new text', button]))
.then((WebElement e) {
expect(e.text, completion('new text'));
});
});
test('executeAsync', () {
WebElement button;
String script = '''
arguments[1].textContent = arguments[0];
arguments[2](arguments[1]);''';
return driver.findElement(new By.tagName('button'))
.then((_e) => button = _e)
.then((_) => driver.executeAsync(script, ['new text', button]))
.then((WebElement e) {
expect(e.text, completion('new text'));
});
});
test('captureScreenshot', () {
return driver.captureScreenshot()
.then((screenshot) {
expect(screenshot, hasLength(isPositive));
expect(screenshot, everyElement(new isInstanceOf<int>()));
});
});
});
});
}