FBCommandStatus.m 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. /**
  2. * Copyright (c) 2015-present, Facebook, Inc.
  3. * All rights reserved.
  4. *
  5. * This source code is licensed under the BSD-style license found in the
  6. * LICENSE file in the root directory of this source tree. An additional grant
  7. * of patent rights can be found in the PATENTS file in the same directory.
  8. */
  9. #import "FBCommandStatus.h"
  10. static NSString *const FB_UNKNOWN_ERROR = @"unknown error";
  11. static const HTTPStatusCode FB_UNKNOWN_ERROR_CODE = kHTTPStatusCodeInternalServerError;
  12. static NSString *const FB_UNKNOWN_ERROR_MSG = @"An unknown server-side error occurred while processing the command";
  13. static NSString *const FB_UNABLE_TO_CAPTURE_ERROR = @"unable to capture screen";
  14. static const HTTPStatusCode FB_UNABLE_TO_CAPTURE_ERROR_CODE = kHTTPStatusCodeInternalServerError;
  15. static NSString *const FB_UNABLE_TO_CAPTURE_MSG = @"A screen capture was made impossible";
  16. static NSString *const FB_NO_SUCH_ELEMENT_ERROR = @"no such element";
  17. static const HTTPStatusCode FB_NO_SUCH_ELEMENT_ERROR_CODE = kHTTPStatusCodeNotFound;
  18. static NSString *const FB_NO_SUCH_ELEMENT_MSG = @"An element could not be located on the page using the given search parameters";
  19. static NSString *const FB_INVALID_ELEMENT_STATE_ERROR = @"invalid element state";
  20. static const HTTPStatusCode FB_INVALID_ELEMENT_STATE_ERROR_CODE = kHTTPStatusCodeBadRequest;
  21. static NSString *const FB_INVALID_ELEMENT_STATE_MSG = @"An element command could not be completed because the element is in an invalid state (e.g. attempting to click a disabled element)";
  22. static NSString *const FB_INVALID_ARGUMENT_ERROR = @"invalid argument";
  23. static const HTTPStatusCode FB_INVALID_ARGUMENT_ERROR_CODE = kHTTPStatusCodeBadRequest;
  24. static NSString *const FB_INVALID_ARGUMENT_MSG = @"The arguments passed to the command are either invalid or malformed";
  25. static NSString *const FB_STALE_ELEMENT_REF_ERROR = @"stale element reference";
  26. static const HTTPStatusCode FB_STALE_ELEMENT_REF_ERROR_CODE = kHTTPStatusCodeNotFound;
  27. static NSString *const FB_STALE_ELEMENT_REF_MSG = @"An element command failed because the referenced element is no longer attached to the DOM";
  28. static NSString *const FB_INVALID_SELECTOR_ERROR = @"invalid selector";
  29. static const HTTPStatusCode FB_INVALID_SELECTOR_ERROR_CODE = kHTTPStatusCodeBadRequest;
  30. static NSString *const FB_INVALID_SELECTOR_MSG = @"Argument was an invalid selector (e.g. XPath/Class Chain)";
  31. static NSString *const FB_NO_ALERT_OPEN_ERROR = @"no such alert";
  32. static const HTTPStatusCode FB_NO_ALERT_OPEN_ERROR_CODE = kHTTPStatusCodeNotFound;
  33. static NSString *const FB_NO_ALERT_OPEN_MSG = @"An attempt was made to operate on a modal dialog when one was not open";
  34. static NSString *const FB_UNEXPECTED_ALERT_OPEN_ERROR = @"unexpected alert open";
  35. static const HTTPStatusCode FB_UNEXPECTED_ALERT_OPEN_ERROR_CODE = kHTTPStatusCodeInternalServerError;
  36. static NSString *const FB_UNEXPECTED_ALERT_OPEN_MSG = @"A modal dialog was open, blocking this operation";
  37. static NSString *const FB_NOT_IMPLEMENTED_ERROR = @"unknown method";
  38. static const HTTPStatusCode FB_NOT_IMPLEMENTED_ERROR_CODE = kHTTPStatusCodeMethodNotAllowed;
  39. static NSString *const FB_NOT_IMPLEMENTED_MSG = @"Method is not implemented";
  40. static NSString *const FB_SESSION_NOT_CREATED_ERROR = @"session not created";
  41. static const HTTPStatusCode FB_SESSION_NOT_CREATED_ERROR_CODE = kHTTPStatusCodeInternalServerError;
  42. static NSString *const FB_SESSION_NOT_CREATED_MSG = @"A new session could not be created";
  43. static NSString *const FB_INVALID_COORDINATES_ERROR = @"invalid coordinates";
  44. static const HTTPStatusCode FB_INVALID_COORDINATES_ERROR_CODE = kHTTPStatusCodeBadRequest;
  45. static NSString *const FB_INVALID_COORDINATES_MSG = @"The coordinates provided to an interactions operation are invalid";
  46. static NSString *const FB_UNSUPPORTED_OPERATION_ERROR = @"unsupported operation";
  47. static const HTTPStatusCode FB_UNSUPPORTED_OPERATION_ERROR_CODE = kHTTPStatusCodeInternalServerError;
  48. static NSString *const FB_UNSUPPORTED_OPERATION_ERROR_MSG = @"The requested operation is not supported";
  49. static NSString *const FB_UNKNOWN_COMMAND_ERROR = @"unknown command";
  50. static const HTTPStatusCode FB_UNKNOWN_COMMAND_ERROR_CODE = kHTTPStatusCodeNotFound;
  51. static NSString *const FB_UNKNOWN_COMMAND_MSG = @"The requested resource could not be found, or a request was received using an HTTP method that is not supported by the mapped resource";
  52. static NSString *const FB_TIMEOUT_ERROR = @"timeout";
  53. static const HTTPStatusCode FB_TIMEOUT_ERROR_CODE = kHTTPStatusCodeRequestTimeout;
  54. static NSString *const FB_TIMEOUT_MSG = @"An operation did not complete before its timeout expired";
  55. static NSString *const FB_ELEMENT_NOT_VISIBLE_ERROR = @"element not visible";
  56. static const HTTPStatusCode FB_ELEMENT_NOT_VISIBLE_ERROR_CODE = kHTTPStatusCodeBadRequest;
  57. static NSString *const FB_ELEMENT_NOT_VISIBLE_MSG = @"An element command could not be completed because the element is not visible on the page";
  58. static NSString *const FB_NO_SUCH_DRIVER_ERROR = @"invalid session id";
  59. static const HTTPStatusCode FB_NO_SUCH_DRIVER_ERROR_CODE = kHTTPStatusCodeNotFound;
  60. static NSString *const FB_NO_SUCH_DRIVER_MSG = @"A session is either terminated or not started";
  61. @implementation FBCommandStatus
  62. - (instancetype)initWithValue:(nullable id)value
  63. {
  64. self = [super init];
  65. if (self) {
  66. _value = value;
  67. _message = nil;
  68. _error = nil;
  69. _traceback = nil;
  70. _statusCode = kHTTPStatusCodeOK;
  71. }
  72. return self;
  73. }
  74. - (instancetype)initWithError:(NSString *)error
  75. statusCode:(HTTPStatusCode)statusCode
  76. message:(NSString *)message
  77. traceback:(nullable NSString *)traceback
  78. {
  79. self = [super init];
  80. if (self) {
  81. _error = error;
  82. _statusCode = statusCode;
  83. _message = message;
  84. _traceback = traceback;
  85. _value = nil;
  86. }
  87. return self;
  88. }
  89. + (instancetype)ok
  90. {
  91. return [[FBCommandStatus alloc] initWithValue:nil];
  92. }
  93. + (instancetype)okWithValue:(id)value
  94. {
  95. return [[FBCommandStatus alloc] initWithValue:value];
  96. }
  97. + (instancetype)unknownErrorWithMessage:(NSString *)message
  98. traceback:(NSString *)traceback
  99. {
  100. return [[FBCommandStatus alloc] initWithError:FB_UNKNOWN_ERROR
  101. statusCode:FB_UNKNOWN_ERROR_CODE
  102. message:message ?: FB_UNKNOWN_ERROR_MSG
  103. traceback:traceback];
  104. }
  105. + (instancetype)unsupportedOperationErrorWithMessage:(NSString *)message
  106. traceback:(NSString *)traceback
  107. {
  108. return [[FBCommandStatus alloc] initWithError:FB_UNSUPPORTED_OPERATION_ERROR
  109. statusCode:FB_UNSUPPORTED_OPERATION_ERROR_CODE
  110. message:message ?: FB_UNSUPPORTED_OPERATION_ERROR_MSG
  111. traceback:traceback];
  112. }
  113. + (instancetype)unableToCaptureScreenErrorWithMessage:(NSString *)message
  114. traceback:(NSString *)traceback
  115. {
  116. return [[FBCommandStatus alloc] initWithError:FB_UNABLE_TO_CAPTURE_ERROR
  117. statusCode:FB_UNABLE_TO_CAPTURE_ERROR_CODE
  118. message:message ?: FB_UNABLE_TO_CAPTURE_MSG
  119. traceback:traceback];
  120. }
  121. + (instancetype)noSuchElementErrorWithMessage:(NSString *)message
  122. traceback:(NSString *)traceback
  123. {
  124. return [[FBCommandStatus alloc] initWithError:FB_NO_SUCH_ELEMENT_ERROR
  125. statusCode:FB_NO_SUCH_ELEMENT_ERROR_CODE
  126. message:message ?: FB_NO_SUCH_ELEMENT_MSG
  127. traceback:traceback];
  128. }
  129. + (instancetype)invalidElementStateErrorWithMessage:(NSString *)message
  130. traceback:(NSString *)traceback
  131. {
  132. return [[FBCommandStatus alloc] initWithError:FB_INVALID_ELEMENT_STATE_ERROR
  133. statusCode:FB_INVALID_ELEMENT_STATE_ERROR_CODE
  134. message:message ?: FB_INVALID_ELEMENT_STATE_MSG
  135. traceback:traceback];
  136. }
  137. + (instancetype)invalidArgumentErrorWithMessage:(NSString *)message
  138. traceback:(NSString *)traceback
  139. {
  140. return [[FBCommandStatus alloc] initWithError:FB_INVALID_ARGUMENT_ERROR
  141. statusCode:FB_INVALID_ARGUMENT_ERROR_CODE
  142. message:message ?: FB_INVALID_ARGUMENT_MSG
  143. traceback:traceback];
  144. }
  145. + (instancetype)staleElementReferenceErrorWithMessage:(NSString *)message
  146. traceback:(NSString *)traceback
  147. {
  148. return [[FBCommandStatus alloc] initWithError:FB_STALE_ELEMENT_REF_ERROR
  149. statusCode:FB_STALE_ELEMENT_REF_ERROR_CODE
  150. message:message ?: FB_STALE_ELEMENT_REF_MSG
  151. traceback:traceback];
  152. }
  153. + (instancetype)invalidSelectorErrorWithMessage:(NSString *)message
  154. traceback:(NSString *)traceback
  155. {
  156. return [[FBCommandStatus alloc] initWithError:FB_INVALID_SELECTOR_ERROR
  157. statusCode:FB_INVALID_SELECTOR_ERROR_CODE
  158. message:message ?: FB_INVALID_SELECTOR_MSG
  159. traceback:traceback];
  160. }
  161. + (instancetype)noAlertOpenErrorWithMessage:(NSString *)message
  162. traceback:(NSString *)traceback
  163. {
  164. return [[FBCommandStatus alloc] initWithError:FB_NO_ALERT_OPEN_ERROR
  165. statusCode:FB_NO_ALERT_OPEN_ERROR_CODE
  166. message:message ?: FB_NO_ALERT_OPEN_MSG
  167. traceback:traceback];
  168. }
  169. + (instancetype)unexpectedAlertOpenErrorWithMessage:(NSString *)message
  170. traceback:(NSString *)traceback
  171. {
  172. return [[FBCommandStatus alloc] initWithError:FB_UNEXPECTED_ALERT_OPEN_ERROR
  173. statusCode:FB_UNEXPECTED_ALERT_OPEN_ERROR_CODE
  174. message:message ?: FB_UNEXPECTED_ALERT_OPEN_MSG
  175. traceback:traceback];
  176. }
  177. + (instancetype)notImplementedErrorWithMessage:(NSString *)message
  178. traceback:(NSString *)traceback
  179. {
  180. return [[FBCommandStatus alloc] initWithError:FB_NOT_IMPLEMENTED_ERROR
  181. statusCode:FB_NOT_IMPLEMENTED_ERROR_CODE
  182. message:message ?: FB_NOT_IMPLEMENTED_MSG
  183. traceback:traceback];
  184. }
  185. + (instancetype)sessionNotCreatedError:(NSString *)message
  186. traceback:(NSString *)traceback
  187. {
  188. return [[FBCommandStatus alloc] initWithError:FB_SESSION_NOT_CREATED_ERROR
  189. statusCode:FB_SESSION_NOT_CREATED_ERROR_CODE
  190. message:message ?: FB_SESSION_NOT_CREATED_MSG
  191. traceback:traceback];
  192. }
  193. + (instancetype)invalidCoordinatesErrorWithMessage:(NSString *)message
  194. traceback:(NSString *)traceback
  195. {
  196. return [[FBCommandStatus alloc] initWithError:FB_INVALID_COORDINATES_ERROR
  197. statusCode:FB_INVALID_COORDINATES_ERROR_CODE
  198. message:message ?: FB_INVALID_COORDINATES_MSG
  199. traceback:traceback];
  200. }
  201. + (instancetype)unknownCommandErrorWithMessage:(NSString *)message
  202. traceback:(NSString *)traceback
  203. {
  204. return [[FBCommandStatus alloc] initWithError:FB_UNKNOWN_COMMAND_ERROR
  205. statusCode:FB_UNKNOWN_COMMAND_ERROR_CODE
  206. message:message ?: FB_UNKNOWN_COMMAND_MSG
  207. traceback:traceback];
  208. }
  209. + (instancetype)timeoutErrorWithMessage:(NSString *)message
  210. traceback:(NSString *)traceback
  211. {
  212. return [[FBCommandStatus alloc] initWithError:FB_TIMEOUT_ERROR
  213. statusCode:FB_TIMEOUT_ERROR_CODE
  214. message:message ?: FB_TIMEOUT_MSG
  215. traceback:traceback];
  216. }
  217. + (instancetype)elementNotVisibleErrorWithMessage:(NSString *)message
  218. traceback:(NSString *)traceback
  219. {
  220. return [[FBCommandStatus alloc] initWithError:FB_ELEMENT_NOT_VISIBLE_ERROR
  221. statusCode:FB_ELEMENT_NOT_VISIBLE_ERROR_CODE
  222. message:message ?: FB_ELEMENT_NOT_VISIBLE_MSG
  223. traceback:traceback];
  224. }
  225. + (instancetype)noSuchDriverErrorWithMessage:(NSString *)message
  226. traceback:(NSString *)traceback
  227. {
  228. return [[FBCommandStatus alloc] initWithError:FB_NO_SUCH_DRIVER_ERROR
  229. statusCode:FB_NO_SUCH_DRIVER_ERROR_CODE
  230. message:message ?: FB_NO_SUCH_DRIVER_MSG
  231. traceback:traceback];
  232. }
  233. @end