| import 'dart:math'; |
| |
| import 'package:webdriver/src/common/request.dart'; |
| import 'package:webdriver/src/common/webdriver_handler.dart'; |
| |
| import 'utils.dart'; |
| |
| class JsonWireElementHandler extends ElementHandler { |
| @override |
| WebDriverRequest buildClickRequest(String elementId) { |
| return new WebDriverRequest.postRequest('${elementPrefix(elementId)}click'); |
| } |
| |
| @override |
| void parseClickResponse(WebDriverResponse response) { |
| parseJsonWireResponse(response); |
| } |
| |
| @override |
| WebDriverRequest buildSendKeysRequest(String elementId, String keysToSend) { |
| return new WebDriverRequest.postRequest( |
| '${elementPrefix(elementId)}value', { |
| 'value': [keysToSend] |
| }); |
| } |
| |
| @override |
| void parseSendKeysResponse(WebDriverResponse response) { |
| parseJsonWireResponse(response); |
| } |
| |
| @override |
| WebDriverRequest buildClearRequest(String elementId) { |
| return new WebDriverRequest.postRequest('${elementPrefix(elementId)}clear'); |
| } |
| |
| @override |
| void parseClearResponse(WebDriverResponse response) { |
| parseJsonWireResponse(response); |
| } |
| |
| @override |
| WebDriverRequest buildSelectedRequest(String elementId) { |
| return WebDriverRequest.getRequest('${elementPrefix(elementId)}selected'); |
| } |
| |
| @override |
| bool parseSelectedResponse(WebDriverResponse response) { |
| return parseJsonWireResponse(response); |
| } |
| |
| @override |
| WebDriverRequest buildEnabledRequest(String elementId) { |
| return WebDriverRequest.getRequest('${elementPrefix(elementId)}enabled'); |
| } |
| |
| @override |
| bool parseEnabledResponse(WebDriverResponse response) { |
| return parseJsonWireResponse(response); |
| } |
| |
| @override |
| WebDriverRequest buildDisplayedRequest(String elementId) { |
| return WebDriverRequest.getRequest('${elementPrefix(elementId)}displayed'); |
| } |
| |
| @override |
| bool parseDisplayedResponse(WebDriverResponse response) { |
| return parseJsonWireResponse(response); |
| } |
| |
| @override |
| WebDriverRequest buildLocationRequest(String elementId) { |
| return WebDriverRequest.getRequest('${elementPrefix(elementId)}location'); |
| } |
| |
| @override |
| Point<int> parseLocationResponse(WebDriverResponse response) { |
| final point = parseJsonWireResponse(response); |
| return new Point(point['x'].toInt(), point['y'].toInt()); |
| } |
| |
| @override |
| WebDriverRequest buildSizeRequest(String elementId) { |
| return WebDriverRequest.getRequest('${elementPrefix(elementId)}size'); |
| } |
| |
| @override |
| Rectangle<int> parseSizeResponse(WebDriverResponse response) { |
| final size = parseJsonWireResponse(response); |
| return new Rectangle<int>( |
| 0, 0, size['width'].toInt(), size['height'].toInt()); |
| } |
| |
| @override |
| WebDriverRequest buildNameRequest(String elementId) { |
| return WebDriverRequest.getRequest('${elementPrefix(elementId)}name'); |
| } |
| |
| @override |
| String parseNameResponse(WebDriverResponse response) { |
| return parseJsonWireResponse(response); |
| } |
| |
| @override |
| WebDriverRequest buildTextRequest(String elementId) { |
| return WebDriverRequest.getRequest('${elementPrefix(elementId)}text'); |
| } |
| |
| @override |
| String parseTextResponse(WebDriverResponse response) { |
| return parseJsonWireResponse(response); |
| } |
| |
| @override |
| WebDriverRequest buildAttributeRequest(String elementId, String name) { |
| return WebDriverRequest.postRequest('execute', { |
| 'script': ''' |
| var attr = arguments[0].attributes["$name"]; |
| if(attr) { |
| return attr.value; |
| } |
| |
| return null; |
| ''', |
| 'args': [ |
| {jsonWireElementStr: elementId} |
| ] |
| }); |
| } |
| |
| @override |
| String parseAttributeResponse(WebDriverResponse response) { |
| return parseJsonWireResponse(response)?.toString(); |
| } |
| |
| @override |
| @deprecated |
| WebDriverRequest buildSeleniumAttributeRequest( |
| String elementId, String name) { |
| return WebDriverRequest.getRequest( |
| '${elementPrefix(elementId)}attribute/$name'); |
| } |
| |
| @override |
| @deprecated |
| String parseSeleniumAttributeResponse(WebDriverResponse response) { |
| return parseJsonWireResponse(response)?.toString(); |
| } |
| |
| @override |
| WebDriverRequest buildCssPropertyRequest(String elementId, String name) { |
| return WebDriverRequest.postRequest('execute', { |
| 'script': |
| 'return window.getComputedStyle(arguments[0]).${_cssPropName(name)};', |
| 'args': [ |
| {jsonWireElementStr: elementId} |
| ] |
| }); |
| } |
| |
| @override |
| String parseCssPropertyResponse(WebDriverResponse response) { |
| return parseJsonWireResponse(response)?.toString(); |
| } |
| |
| @override |
| WebDriverRequest buildPropertyRequest(String elementId, String name) { |
| return WebDriverRequest.postRequest('execute', { |
| 'script': 'return arguments[0]["$name"];', |
| 'args': [ |
| {jsonWireElementStr: elementId} |
| ] |
| }); |
| } |
| |
| @override |
| String parsePropertyResponse(WebDriverResponse response) { |
| return parseJsonWireResponse(response)?.toString(); |
| } |
| |
| /// Convert hyphenated-properties to camelCase. |
| String _cssPropName(String name) => name.splitMapJoin(new RegExp(r'-(\w)'), |
| onMatch: (m) => m.group(1).toUpperCase(), onNonMatch: (m) => m); |
| } |