没有权限。看出错日志 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()
thank you
还有这规定呀,哈哈,我估计换我本人头像,会迷死一大片,哈哈哈哈
@wodeta33 为什么你们可以发布话题,我好像不可以发布话题了,好像没用违规呀。。
@seveniruby 为什么我突然不可以发布新话题了呀???
这个问题我来回答下:
要加上这行类似这样的代码:
desired_caps['appWaitActivity'] = 'com.opera.android.OperaMainActivity'
如果 app 能起来,说明不是 adb 的问题,它报错说 activity 没能找到,那就把哪个 activity 加在 appWaitActivity 上面。
这个原因是因为,有些 activity 要想起来,必须依赖某个 activity。我之前遇到过,加上这行代码就不报错了。
看下英文版解释:
appWaitActivity: A new session could not be created
While exploring Appium with mobile devices I hit the following error
WebDriverException: Message: u’A new session could not be created. (Original error: atpwta.live/.activity.Main never started. Current: atpwta.live/.activity.root.TournamentList)’
So why did appWaitActivity help?
A simplified (but technically incorrect) way of understanding this error is that Appium was waiting for a screen name .activity.Main and timed out. The error helpfully tells you the current active screen is .activity.root.TournamentList. The desired capability appWaitActivity tells Appium what Android activity it should wait for. If you see a similar error, set your appWaitActivity to match the current activity in the error message.
这么积极 哈哈
先确定 adb devices 确定有用,这个有用的话,就可以看到了
...
第一步 npm install appium-doctor -g
第二步 配置 path C:\Users\jhon\AppData\Roaming\npm;C:\Users\jhon\AppData\Roaming\npm\node_modules\appium\node_modules.bin
#1 楼 @erickyang 有没有个列子呀