blob: b33067d32833bb3be21791e5edee9442ff702001 [file] [log] [blame]
// Copyright 2015 Google Inc. All Rights Reserved.
//
// 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 License 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.
library webdriver.core;
import 'dart:async' show Future;
import 'dart:collection' show UnmodifiableMapView;
import 'src/async/web_driver.dart';
import 'src/common/capabilities.dart';
import 'src/common/request_client.dart';
import 'src/common/spec.dart';
import 'src/common/utils.dart';
export 'package:webdriver/src/async/alert.dart';
export 'package:webdriver/src/async/common.dart';
export 'package:webdriver/src/async/cookies.dart';
export 'package:webdriver/src/async/keyboard.dart';
export 'package:webdriver/src/async/logs.dart';
export 'package:webdriver/src/async/mouse.dart';
export 'package:webdriver/src/async/target_locator.dart';
export 'package:webdriver/src/async/timeouts.dart';
export 'package:webdriver/src/async/web_driver.dart';
export 'package:webdriver/src/async/web_element.dart';
export 'package:webdriver/src/async/window.dart';
export 'package:webdriver/src/common/by.dart';
export 'package:webdriver/src/common/capabilities.dart';
export 'package:webdriver/src/common/command_event.dart';
export 'package:webdriver/src/common/cookie.dart';
export 'package:webdriver/src/common/exception.dart';
export 'package:webdriver/src/common/log.dart';
export 'package:webdriver/src/common/mouse.dart';
export 'package:webdriver/src/common/spec.dart';
final Uri defaultUri = Uri.parse('http://127.0.0.1:4444/wd/hub/');
/// Creates a new async WebDriver.
///
/// This is intended for internal use! Please use [createDriver] from
/// async_io.dart or async_html.dart.
Future<WebDriver> createDriver(
AsyncRequestClient Function(Uri prefix) createRequestClient,
{Uri? uri,
Map<String, dynamic>? desired,
WebDriverSpec spec = WebDriverSpec.Auto}) async {
uri ??= defaultUri;
// This client's prefix at root, it has no session prefix in it.
final client = createRequestClient(uri);
final handler = getHandler(spec);
final session = await client.send(
handler.session.buildCreateRequest(desired: desired),
handler.session.parseCreateResponse);
if (session.spec != WebDriverSpec.JsonWire &&
session.spec != WebDriverSpec.W3c) {
throw 'Unexpected spec: ${session.spec}';
}
return WebDriver(uri, session.id, UnmodifiableMapView(session.capabilities!),
createRequestClient(uri.resolve('session/${session.id}/')), session.spec);
}
/// Creates an async WebDriver from existing session.
///
/// This is intended for internal use! Please use [fromExistingSession] from
/// async_io.dart or async_html.dart.
Future<WebDriver> fromExistingSession(
AsyncRequestClient Function(Uri prefix) createRequestClient,
String sessionId,
{Uri? uri,
WebDriverSpec spec = WebDriverSpec.Auto}) async {
uri ??= defaultUri;
// This client's prefix at root, it has no session prefix in it.
final client = createRequestClient(uri);
final handler = getHandler(spec);
final session = await client.send(handler.session.buildInfoRequest(sessionId),
(response) => handler.session.parseInfoResponse(response, sessionId));
if (session.spec != WebDriverSpec.JsonWire &&
session.spec != WebDriverSpec.W3c) {
throw 'Unexpected spec: ${session.spec}';
}
return WebDriver(uri, session.id, UnmodifiableMapView(session.capabilities!),
createRequestClient(uri.resolve('session/${session.id}/')), session.spec);
}
/// Creates an async WebDriver from existing session with a sync function.
///
/// This will be helpful when you can't use async when creating WebDriver. For
/// example in a consctructor.
///
/// This is intended for internal use! Please use [fromExistingSessionSync] from
/// async_io.dart or async_html.dart.
WebDriver fromExistingSessionSync(
AsyncRequestClient Function(Uri prefix) createRequestClient,
String sessionId,
WebDriverSpec spec,
{Uri? uri,
Map<String, dynamic>? capabilities}) {
uri ??= defaultUri;
capabilities ??= Capabilities.empty;
if (spec != WebDriverSpec.JsonWire && spec != WebDriverSpec.W3c) {
throw 'Unexpected spec: $spec';
}
return WebDriver(uri, sessionId, UnmodifiableMapView(capabilities),
createRequestClient(uri.resolve('session/$sessionId/')), spec);
}