设为首页 收藏本站
查看: 872|回复: 0

[经验分享] 新手学appium-python-client+appium api 1-from appium import webdriver

[复制链接]

尚未签到

发表于 2015-11-30 12:13:03 | 显示全部楼层 |阅读模式
1 #各位客官,虽然今天是周末,我还是奋斗到工作的第一线
  2 #研究python-client,也就是api,哈哈,大家自己翻译吧,我把代码贴出来
  3 @property
  4     def contexts(self):
  5         """
  6         Returns the contexts within the current session.
  7
  8         :Usage:
  9             driver.contexts
10         """
11         return self.execute(Command.CONTEXTS)['value']
12
13     @property
14     def current_context(self):
15         """
16         Returns the current context of the current session.
17
18         :Usage:
19             driver.current_context
20         """
21         return self.execute(Command.GET_CURRENT_CONTEXT)['value']
22
23     @property
24     def context(self):
25         """
26         Returns the current context of the current session.
27
28         :Usage:
29             driver.context
30         """
31         return self.current_context
32
33     def find_element_by_ios_uiautomation(self, uia_string):
34         """Finds an element by uiautomation in iOS.
35
36         :Args:
37          - uia_string - The element name in the iOS UIAutomation library
38
39         :Usage:
40             driver.find_element_by_ios_uiautomation('.elements()[1].cells()[2]')
41         """
42         return self.find_element(by=By.IOS_UIAUTOMATION, value=uia_string)
43
44     def find_elements_by_ios_uiautomation(self, uia_string):
45         """Finds elements by uiautomation in iOS.
46
47         :Args:
48          - uia_string - The element name in the iOS UIAutomation library
49
50         :Usage:
51             driver.find_elements_by_ios_uiautomation('.elements()[1].cells()[2]')
52         """
53         return self.find_elements(by=By.IOS_UIAUTOMATION, value=uia_string)
54
55     def find_element_by_android_uiautomator(self, uia_string):
56         """Finds element by uiautomator in Android.
57
58         :Args:
59          - uia_string - The element name in the Android UIAutomator library
60
61         :Usage:
62             driver.find_element_by_android_uiautomator('.elements()[1].cells()[2]')
63         """
64         return self.find_element(by=By.ANDROID_UIAUTOMATOR, value=uia_string)
65
66     def find_elements_by_android_uiautomator(self, uia_string):
67         """Finds elements by uiautomator in Android.
68
69         :Args:
70          - uia_string - The element name in the Android UIAutomator library
71
72         :Usage:
73             driver.find_elements_by_android_uiautomator('.elements()[1].cells()[2]')
74         """
75         return self.find_elements(by=By.ANDROID_UIAUTOMATOR, value=uia_string)
76
77     def find_element_by_accessibility_id(self, id):
78         """Finds an element by accessibility id.
79
80         :Args:
81          - id - a string corresponding to a recursive element search using the
82          Id/Name that the native Accessibility options utilize
83
84         :Usage:
85             driver.find_element_by_accessibility_id()
86         """
87         return self.find_element(by=By.ACCESSIBILITY_ID, value=id)
88
89     def find_elements_by_accessibility_id(self, id):
90         """Finds elements by accessibility id.
91
92         :Args:
93          - id - a string corresponding to a recursive element search using the
94          Id/Name that the native Accessibility options utilize
95
96         :Usage:
97             driver.find_elements_by_accessibility_id()
98         """
99         return self.find_elements(by=By.ACCESSIBILITY_ID, value=id)
100
101     def create_web_element(self, element_id):
102         """
103         Creates a web element with the specified element_id.
104         Overrides method in Selenium WebDriver in order to always give them
105         Appium WebElement
106         """
107         return MobileWebElement(self, element_id)
108
109     # convenience method added to Appium (NOT Selenium 3)
110     def scroll(self, origin_el, destination_el):
111         """Scrolls from one element to another
112
113         :Args:
114          - originalEl - the element from which to being scrolling
115          - destinationEl - the element to scroll to
116
117         :Usage:
118             driver.scroll(el1, el2)
119         """
120         action = TouchAction(self)
121         action.press(origin_el).move_to(destination_el).release().perform()
122         return self
123
124     # convenience method added to Appium (NOT Selenium 3)
125     def drag_and_drop(self, origin_el, destination_el):
126         """Drag the origin element to the destination element
127
128         :Args:
129          - originEl - the element to drag
130          - destinationEl - the element to drag to
131         """
132         action = TouchAction(self)
133         action.long_press(origin_el).move_to(destination_el).release().perform()
134         return self
135
136     # convenience method added to Appium (NOT Selenium 3)
137     def tap(self, positions, duration=None):
138         """Taps on an particular place with up to five fingers, holding for a
139         certain time
140
141         :Args:
142          - positions - an array of tuples representing the x/y coordinates of
143          the fingers to tap. Length can be up to five.
144          - duration - (optional) length of time to tap, in ms
145
146         :Usage:
147             driver.tap([(100, 20), (100, 60), (100, 100)], 500)
148         """
149         if len(positions) == 1:
150             action = TouchAction(self)
151             x = positions[0][0]
152             y = positions[0][1]
153             if duration:
154                 duration = duration
155                 action.long_press(x=x, y=y, duration=duration).release()
156             else:
157                 action.press(x=x, y=y).release()
158             action.perform()
159         else:
160             ma = MultiAction(self)
161             for position in positions:
162                 x = position[0]
163                 y = position[1]
164                 action = TouchAction(self)
165                 if duration:
166                     duration *= 1000  # we take seconds, but send milliseconds
167                     action.long_press(x=x, y=y, duration=duration).release()
168                 else:
169                     action.press(x=x, y=y).release()
170                 ma.add(action)
171
172             ma.perform()
173         return self
174
175     # convenience method added to Appium (NOT Selenium 3)
176     def swipe(self, start_x, start_y, end_x, end_y, duration=None):
177         """Swipe from one point to another point, for an optional duration.
178
179         :Args:
180          - start_x - x-coordinate at which to start
181          - start_y - y-coordinate at which to end
182          - end_x - x-coordinate at which to stop
183          - end_y - y-coordinate at which to stop
184          - duration - (optional) time to take the swipe, in ms.
185
186         :Usage:
187             driver.swipe(100, 100, 100, 400)
188         """
189         # `swipe` is something like press-wait-move_to-release, which the server
190         # will translate into the correct action
191         action = TouchAction(self)
192         action \
193             .press(x=start_x, y=start_y) \
194             .wait(ms=duration) \
195             .move_to(x=end_x, y=end_y) \
196             .release()
197         action.perform()
198         return self
199
200     # convenience method added to Appium (NOT Selenium 3)
201     def flick(self, start_x, start_y, end_x, end_y):
202         """Flick from one point to another point.
203
204         :Args:
205          - start_x - x-coordinate at which to start
206          - start_y - y-coordinate at which to end
207          - end_x - x-coordinate at which to stop
208          - end_y - y-coordinate at which to stop
209
210         :Usage:
211             driver.flick(100, 100, 100, 400)
212         """
213         action = TouchAction(self)
214         action \
215             .press(x=start_x, y=start_y) \
216             .move_to(x=end_x, y=end_y) \
217             .release()
218         action.perform()
219         return self
220
221     # convenience method added to Appium (NOT Selenium 3)
222     def pinch(self, element=None, percent=200, steps=50):
223         """Pinch on an element a certain amount
224
225         :Args:
226          - element - the element to pinch
227          - percent - (optional) amount to pinch. Defaults to 200%
228          - steps - (optional) number of steps in the pinch action
229
230         :Usage:
231             driver.pinch(element)
232         """
233         if element:
234             element = element.id
235
236         opts = {
237             'element': element,
238             'percent': percent,
239             'steps': steps,
240         }
241         self.execute_script('mobile: pinchClose', opts)
242         return self
243
244     # convenience method added to Appium (NOT Selenium 3)
245     def zoom(self, element=None, percent=200, steps=50):
246         """Zooms in on an element a certain amount
247
248         :Args:
249          - element - the element to zoom
250          - percent - (optional) amount to zoom. Defaults to 200%
251          - steps - (optional) number of steps in the zoom action
252
253         :Usage:
254             driver.zoom(element)
255         """
256         if element:
257             element = element.id
258
259         opts = {
260             'element': element,
261             'percent': percent,
262             'steps': steps,
263         }
264         self.execute_script('mobile: pinchOpen', opts)
265         return self
266
267     def app_strings(self, language=None):
268         """Returns the application strings from the device for the specified
269         language.
270
271         :Args:
272          - language - strings language code
273         """
274         data = {}
275         if language != None:
276             data['language'] = language
277         return self.execute(Command.GET_APP_STRINGS, data)['value']
278
279     def reset(self):
280         """Resets the current application on the device.
281         """
282         self.execute(Command.RESET)
283         return self
284
285     def hide_keyboard(self, key_name=None):
286         """Hides the software keyboard on the device, using the specified key to
287         press. If no key name is given, the keyboard is closed by moving focus
288         from the text field. iOS only.
289         """
290         data = {}
291         if key_name is not None:
292             data['keyName'] = key_name
293         self.execute(Command.HIDE_KEYBOARD, data)
294         return self
295
296     # TODO: remove when new Appium is out
297     def keyevent(self, keycode, metastate=None):
298         """Sends a keycode to the device. Android only. Possible keycodes can be
299         found in http://developer.android.com/reference/android/view/KeyEvent.html.
300
301         :Args:
302          - keycode - the keycode to be sent to the device
303          - metastate - meta information about the keycode being sent
304         """
305         data = {
306             'keycode': keycode,
307         }
308         if metastate is not None:
309             data['metastate'] = metastate
310         self.execute(Command.KEY_EVENT, data)
311         return self
312
313     def press_keycode(self, keycode, metastate=None):
314         """Sends a keycode to the device. Android only. Possible keycodes can be
315         found in http://developer.android.com/reference/android/view/KeyEvent.html.
316
317         :Args:
318          - keycode - the keycode to be sent to the device
319          - metastate - meta information about the keycode being sent
320         """
321         data = {
322             'keycode': keycode,
323         }
324         if metastate is not None:
325             data['metastate'] = metastate
326         self.execute(Command.PRESS_KEYCODE, data)
327         return self
328
329     def long_press_keycode(self, keycode, metastate=None):
330         """Sends a long press of keycode to the device. Android only. Possible keycodes can be
331         found in http://developer.android.com/reference/android/view/KeyEvent.html.
332
333         :Args:
334          - keycode - the keycode to be sent to the device
335          - metastate - meta information about the keycode being sent
336         """
337         data = {
338             'keycode': keycode
339         }
340         if metastate != None:
341             data['metastate'] = metastate
342         self.execute(Command.LONG_PRESS_KEYCODE, data)
343         return self
344
345     @property
346     def current_activity(self):
347         """Retrieves the current activity on the device.
348         """
349         return self.execute(Command.GET_CURRENT_ACTIVITY)['value']
350
351     def set_value(self, element, value):
352         """Set the value on an element in the application.
353
354         :Args:
355          - element - the element whose value will be set
356          - Value - the value to set on the element
357         """
358         data = {
359             'elementId': element.id,
360             'value': [value],
361         }
362         self.execute(Command.SET_IMMEDIATE_VALUE, data)
363         return self
364
365     def pull_file(self, path):
366         """Retrieves the file at `path`. Returns the file's content encoded as
367         Base64.
368
369         :Args:
370          - path - the path to the file on the device
371         """
372         data = {
373             'path': path,
374         }
375         return self.execute(Command.PULL_FILE, data)['value']
376
377     def push_file(self, path, base64data):
378         """Puts the data, encoded as Base64, in the file specified as `path`.
379
380         :Args:
381          - path - the path on the device
382          - base64data - data, encoded as Base64, to be written to the file
383         """
384         data = {
385             'path': path,
386             'data': base64data,
387         }
388         self.execute(Command.PUSH_FILE, data)
389         return self
390
391     def complex_find(self, selector):
392         """Performs a find for elements in the current application.
393
394         :Args:
395          - selector - an array of selection criteria
396         """
397         data = {
398             'selector': selector,
399         }
400         return self.execute(Command.COMPLEX_FIND, data)['value']
401
402     def background_app(self, seconds):
403         """Puts the application in the background on the device for a certain
404         duration.
405
406         :Args:
407          - seconds - the duration for the application to remain in the background
408         """
409         data = {
410             'seconds': seconds,
411         }
412         self.execute(Command.BACKGROUND, data)
413         return self
414
415     def is_app_installed(self, bundle_id):
416         """Checks whether the application specified by `bundle_id` is installed
417         on the device.
418
419         :Args:
420          - bundle_id - the id of the application to query
421         """
422         data = {
423             'bundleId': bundle_id,
424         }
425         return self.execute(Command.IS_APP_INSTALLED, data)['value']
426
427     def install_app(self, app_path):
428         """Install the application found at `app_path` on the device.
429
430         :Args:
431          - app_path - the local or remote path to the application to install
432         """
433         data = {
434             'appPath': app_path,
435         }
436         self.execute(Command.INSTALL_APP, data)
437         return self
438
439     def remove_app(self, app_id):
440         """Remove the specified application from the device.
441
442         :Args:
443          - app_id - the application id to be removed
444         """
445         data = {
446             'appId': app_id,
447         }
448         self.execute(Command.REMOVE_APP, data)
449         return self
450
451     def launch_app(self):
452         """Start on the device the application specified in the desired capabilities.
453         """
454         self.execute(Command.LAUNCH_APP)
455         return self
456
457     def close_app(self):
458         """Stop the running application, specified in the desired capabilities, on
459         the device.
460         """
461         self.execute(Command.CLOSE_APP)
462         return self
463
464     def end_test_coverage(self, intent, path):
465         """Ends the coverage collection and pull the coverage.ec file from the device.
466         Android only.
467
468         See https://github.com/appium/appium/blob/master/docs/en/android_coverage.md
469
470         :Args:
471          - intent - description of operation to be performed
472          - path - path to coverage.ec file to be pulled from the device
473         """
474         data = {
475             'intent': intent,
476             'path': path,
477         }
478         return self.execute(Command.END_TEST_COVERAGE, data)['value']
479
480     def lock(self, seconds):
481         """Lock the device for a certain period of time. iOS only.
482
483         :Args:
484          - the duration to lock the device, in seconds
485         """
486         data = {
487             'seconds': seconds,
488         }
489         self.execute(Command.LOCK, data)
490         return self
491
492     def shake(self):
493         """Shake the device.
494         """
495         self.execute(Command.SHAKE)
496         return self
497
498     def open_notifications(self):
499         """Open notification shade in Android (API Level 18 and above)
500         """
501         self.execute(Command.OPEN_NOTIFICATIONS, {})
502         return self
503
504     def _addCommands(self):
505         self.command_executor._commands[Command.CONTEXTS] = \
506             ('GET', '/session/$sessionId/contexts')
507         self.command_executor._commands[Command.GET_CURRENT_CONTEXT] = \
508             ('GET', '/session/$sessionId/context')
509         self.command_executor._commands[Command.SWITCH_TO_CONTEXT] = \
510             ('POST', '/session/$sessionId/context')
511         self.command_executor._commands[Command.TOUCH_ACTION] = \
512             ('POST', '/session/$sessionId/touch/perform')
513         self.command_executor._commands[Command.MULTI_ACTION] = \
514             ('POST', '/session/$sessionId/touch/multi/perform')
515         self.command_executor._commands[Command.GET_APP_STRINGS] = \
516             ('POST', '/session/$sessionId/appium/app/strings')
517         # TODO: remove when new Appium is out
518         self.command_executor._commands[Command.KEY_EVENT] = \
519             ('POST', '/session/$sessionId/appium/device/keyevent')
520         self.command_executor._commands[Command.PRESS_KEYCODE] = \
521             ('POST', '/session/$sessionId/appium/device/press_keycode')
522         self.command_executor._commands[Command.LONG_PRESS_KEYCODE] = \
523             ('POST', '/session/$sessionId/appium/device/long_press_keycode')
524         self.command_executor._commands[Command.GET_CURRENT_ACTIVITY] = \
525             ('GET', '/session/$sessionId/appium/device/current_activity')
526         self.command_executor._commands[Command.SET_IMMEDIATE_VALUE] = \
527             ('POST', '/session/$sessionId/appium/element/$elementId/value')
528         self.command_executor._commands[Command.PULL_FILE] = \
529             ('POST', '/session/$sessionId/appium/device/pull_file')
530         self.command_executor._commands[Command.PUSH_FILE] = \
531             ('POST', '/session/$sessionId/appium/device/push_file')
532         self.command_executor._commands[Command.COMPLEX_FIND] = \
533             ('POST', '/session/$sessionId/appium/app/complex_find')
534         self.command_executor._commands[Command.BACKGROUND] = \
535             ('POST', '/session/$sessionId/appium/app/background')
536         self.command_executor._commands[Command.IS_APP_INSTALLED] = \
537             ('POST', '/session/$sessionId/appium/device/app_installed')
538         self.command_executor._commands[Command.INSTALL_APP] = \
539             ('POST', '/session/$sessionId/appium/device/install_app')
540         self.command_executor._commands[Command.REMOVE_APP] = \
541             ('POST', '/session/$sessionId/appium/device/remove_app')
542         self.command_executor._commands[Command.LAUNCH_APP] = \
543             ('POST', '/session/$sessionId/appium/app/launch')
544         self.command_executor._commands[Command.CLOSE_APP] = \
545             ('POST', '/session/$sessionId/appium/app/close')
546         self.command_executor._commands[Command.END_TEST_COVERAGE] = \
547             ('POST', '/session/$sessionId/appium/app/end_test_coverage')
548         self.command_executor._commands[Command.LOCK] = \
549             ('POST', '/session/$sessionId/appium/device/lock')
550         self.command_executor._commands[Command.SHAKE] = \
551             ('POST', '/session/$sessionId/appium/device/shake')
552         self.command_executor._commands[Command.RESET] = \
553             ('POST', '/session/$sessionId/appium/app/reset')
554         self.command_executor._commands[Command.HIDE_KEYBOARD] = \
555             ('POST', '/session/$sessionId/appium/device/hide_keyboard')
556         self.command_executor._commands[Command.OPEN_NOTIFICATIONS] = \
557             ('POST', '/session/$sessionId/appium/device/open_notifications')
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-145353-1-1.html 上篇帖子: 2015/9/17 Python基础(13):函数 下篇帖子: 从Python传递JSON到JavaScript
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表