• 没有权限。看出错日志 Premission

  • 一脸懵比。。。。。。。。。。。。。

  • appium 是可以测 webview 的。只是我不知道怎么破。哈哈哈。。
    看网上说什么切换上下文,我进入到 webview ,上下文还是 nativeapp.
    又看网上说要打开什么调试开关,打开后,进入到 webview ,上下文还是 nativeapp.
    所以就一脸懵比。。。。
    有没有谁能提供一篇比较好的 appium 测试 webview 的文章。。。。

  • 你解释的还比较清楚,我这些 case 是因为之前拿到了 dump 信息才执行通过,现在拿不到了。。这么不稳定,肯定需要解决,不然 case 写的 没有意义,能请教下 你是怎么解决的嘛?

  • 有没有人有相同的情况呀,这导致我很多 case 都运行不了呀

  • 要是进去了,打车不要钱我就去

  • 有美女就去。。。。。

  • 你第一个 slef 都写错了。。。self

  • self.driver.tap([(X, Y)])
    X,Y 分别为横坐标,和纵坐标

    appium 获取信息类 API

    (1)获取默认系统语言对应的 Strings.xml 文件内的数据。

    get_app_string()

    (2)查找某一个语言环境对应的字符串文件 Strings.xml 内数据。

    get_app_string(String language)

    (3)获取当前 activity,比如(.ApiDemos)

    current_activity()

    App 安装与卸载类 API

    (1)根据 bundleId 来判断该应用是否已经安装

    is_app_installed(String bundleId)

    (2)安装 app,appPath 为应用的本地路径

    install_app(String appPath)

    (3)卸载 app.bundleId 在 android 中代表的是包名,而在 iOS 中有专门的 bundleId 号。

    remove_app(String bundleId)

    (4)关闭应用,其实就是按 home 键把应用置于后台

    close_app()

    (5)启动应用

    launch_app()

    (6)先 closeApp 然后在 launchAPP

    reset_app()

    文件操作类 API

    (1)将字符数组用 64 位格式写到远程目录的某个文件中。也可以理解为把本地文件 push 到设备上。

    push_file(String remotePath, byte[] base64Data)

    (2)将设备上的文件 pull 到本地硬盘上

    pull_file(String remotePath)

    (3)将设备上的文件夹 pull 到本地硬盘上,一般远程文件为/data/local/tmp 下的文件。

    pull_folder(String remotePath)

    设置相关类 API

    (1)设置手机的网络连接状态,可以开关蓝牙、wifi、数据流量。通过 NetworkConnectionSetting 中的属性来设置各个网络连接的状态。

    set_network_connect(NetworkConnectionSetting connection)

    (2)得到当前网络的状态

    get_network_connection()

    用户操作类 API

    (1)ios 隐藏键盘

    hide_keyboard()

    (2)隐藏键盘,只能用于 ios 上。

    hide_keyboard(String strategy, String keyName)

    (3)按下某个键,具体哪个键由 key 值决定,key 值定义在 AndroidKeyCode 类中

    send_key_event(int key)

    (4)执行一个 touch 动作,该 touch 动作是由 TouchAction 封装的。

    perform_touchAction(TouchAction touchAction)

    (5)点击 element 控件中心点按下,duration*5 毫秒秒后松开,如此重复 fingers 次。

    tap(int fingers, WebElement element, int duration)

    (6)点击 (x,y) 点按下,duration*5 毫秒后松开,如此重复 fingers 次。

    tap(int fingers, int x, int y, int duration)

    (7)从 (startx,starty) 滑到(endx,endy),分 duration 步滑,每一步用时是 5 毫秒。

    swipe(int startx, int starty, int endx, int endy, int duration)

    (8)2 个手指操作控件,从对角线向中心点滑动。

    pinch(WebElement el)

    (9)以(x,y)为基准,计算得出(x,y-100),(x,y+100) 两个点,然后 2 个手指按住这两个点同时滑到(x,y)

    pinch(int x, int y)

    (10) 与 pinch(el) 的动作刚好相反。两个手指由控件的中心点慢慢向控件的左顶点后右底点滑动。

    zoom(WebElement el)

    (11) 和 pinch(x,y) 相反。两个手指从(x,y)点开始向(x,y-100)和(x,y+100)滑动。

    zoom(int x, int y)

    (12) 锁屏多少秒后解锁

    lock_screen(int seconds)

    (13) 模拟摇晃手机

    shake()

    (14) 滚动到某个 text 属性为指定的字符串的控件

    scroll_to(String text)

    (15) 滚动方向由 element1 到 element2

    scroll(element1,element2)

    (16) 滚动到某个 text 属性包含传入的字符串的控件

    scroll_to_exact(String text)

    (17) 设置上下文

    context(String name)

    (18) 可用上下文

    get_context_handles()

    (19) 当前上下文

    get_context()

    (20) 设置屏幕横屏或者竖屏

    rotate(ScreenOrientation orientation)

    (21) 获取当前屏幕的方向

    get_orientation()

    获取控件类 API

    seleniumdriver

    find_element_by_id
    find_elements_by_id
    find_element_by_name
    find_elements_by_name
    find_element_by_link_text
    find_elements_by_link_text
    find_element_by_partial_link_text
    find_elements_by_partial_link_text
    find_element_by_tag_name
    find_elements_by_tag_name
    find_element_by_xpath
    find_elements_by_xpath
    find_element_by_class_name
    find_elements_by_class_name
    find_element_by_css_selector
    find_elements_by_css_selector

    appiumdriver

    find_element_by_ios_uiautomation
    find_elements_by_ios_uiautomation
    find_element_by_android_uiautomator
    find_elements_by_android_uiautomator
    find_element_by_accessibility_id
    find_elements_by_accessibility_id

    AppiumDriver 的辅助类

    主要针对手势操作,比如滑动、长按、拖动等。TouchAction 的原理是讲一系列的动作放在一个链条中,然后将该链条传递给服务器。服务器接受到该链条后,解析各个动作,逐个执行。

    TouchAction()

    (1)在控件上执行 press 操作

    press(WebElement el)

    (2)在坐标为(x,y)的点执行 press 操作

    press(int x, int y)

    (3)在控件 el 的左上角的 x 坐标偏移 x 单位,y 左边偏移 y 单位的坐标上执行 press 操作。

    press(WebElement el, int x, int y)

    (4)释放操作,代表该系列动作的一个结束标志。

    release()

    (5)以 el 为目标,从另一个点移动到该目标上

    move_to(WebElement el)

    (6)以(x,y)点为目标,从另一个点移动到该目标上

    move_to( int x, int y)

    (7) 在控件的中心点上敲击一下

    tap(WebElement el)

    (8) 在(x,y)点轻击一下

    tap(int x, int y)

    (9) 以控件 el 的左上角为基准,x 轴向右移动 x 单位,y 轴向下移动 y 单位。在该点上轻击。

    tap(WebElement el, int x, int y)

    (10) 代表一个空操作,等待一段时间

    wait_action()

    (11) 等待 ms 秒

    wait_action(int ms)

    (12) 控件长按

    long_press(WebElement el)

    (13) 点长按

    long_press(int x, int y)

    (14)偏移点长按

    long_press(WebElement el, int x, int y)

    (15)取消执行该动作

    cancel()