Appium 支持 Webdriver 协议.
RobotFramework 也支持 Webdriver 协议.
所以是可以用 RobotFramework 来运行 appium 测试案例了
我在 ppt 里面的演示, 也是基于 RF 的.
但是因为一些特殊的原因, 比如 RF 会访问一些 appium 不支持的协议. 比如异步脚本协议.
appium 会默认返回一个 503 暂未实现的错误, 这样 RF 的测试用例就无法运行了.
所以解决方法是修改 appium 的代码. 让协议的返回代码从错误改成 200 正常.
代码修改如下
var notYetImplemented = exports.notYetImplemented = function(req, res) {
logger.info("Responding to client that a method is not implemented");
res.send(501, {
status: status.codes.UnknownError.code
, sessionId: getSessionId(req)
, value: {
message: "Not yet implemented. " +
"Please help us: http://appium.io/get-involved.html"
}
});
};
修改为
var notYetImplemented = exports.notYetImplemented = function(req, res) {
logger.info("Responding to client that a method is not implemented");
res.send(501, {
status: status.codes.Success.code
, sessionId: getSessionId(req)
, value: {
message: "Not yet implemented. " +
"Please help us: http://appium.io/get-involved.html"
}
});
};
能不修改,用 stub 么?
#1 楼 @lihuazhang 可以考虑写 js 重载 rf 是直接发到了 appium 也可以在中间加代理去掉不支持的请求 但这样会导致更新问题 如果不支持的协议某天支持了 你的代理或者 js 都得更新 我更倾向于让 appium 返回一个报警而不是错误 从 rf 里面修改代码也可以
@seveniruby 你好不知能否 share 下你用 robotframework+appium 测试淘宝的 txt 内容吗,或者不方便的话能否私信,万分感谢,
#4 楼 @seveniruby 那个 open app 的 keyword 是分享下吗。。。
*** Keywords ***
open app
[Arguments] ${package} ${activity}
${capabilities}= Create Dictionary
Set To Dictionary ${capabilities} browserName android
Set To Dictionary ${capabilities} version 4.1
Set To Dictionary ${capabilities} platform linux
Set To Dictionary ${capabilities} takesScreenshot false
Set To Dictionary ${capabilities} javascriptEnabled false
Set To Dictionary ${capabilities} app-activity ${activity}
Set To Dictionary ${capabilities} app-package ${package}
Log Dictionary ${capabilities}
Close Browser
Close All Browsers
Set Selenium Timeout 30
Open Browser \ browser=android remote_url=http://127.0.0.1:4723/wd/hub desired_capabilities=${capabilities}
@sevenirub 你好,能问下这个改动是那个 appium 文件吗
@seveniruby 我拿你的例子,自己修改了 open app 如下,然后修改了 appium server 下面的 response.js 文件,但是 FR run 的时候还是老报错。大神能帮忙看下吗,真是不好意思了,最近问题很多。。。
Appium log:
RF 错:
20131218 09:48:28.374 : INFO : Opening browser 'android' to base url '' through remote server at 'http://127.0.0.1:4723/wd/hub'
20131218 09:48:37.556 : FAIL : No browser is open
20131218 09:48:37.556 : WARN : Keyword 'Capture Page Screenshot' could not be run on failure: No browser is open
20131218 09:48:37.557 : FAIL : WebDriverException: Message: u'The requested resource could not be found, or a request was received using an HTTP method that is not supported by the mapped resource.'
@seveniruby ,能否帮忙看下。。。
#10 楼 @seveniruby 我 show 出来的是 opp app 的代码,我换了 UIautomator 是 ok 的,所以我在找这个 selendroid 的这个错误是从那个方法抛出来的,看看改了行不行唉真心坑多啊。。。
没看到有 ppt 能发我一份么,你的 rf 是安装在 mac 系统上的么
请问下 selenium 中的 webdriver 怎么导入到 ride 中,我直接写 selenium 或者直接路径都不行,library 那边还是显示红色。导入 webdriver 还需要做什么操作么
@atm123 ,如果你 selenium2library 装好的话,路径直接填这个就行了
@seveniruby ,目前不改 rf 的 selenium2library 支持 appium 还很困难,各种 post 不支持
恩,问题就在于直接调用现成 keyword,很多协议不支持。。。
比如说 open browser,或者 capture page screenshot,背后会转换成多个 post 请求到 device 上的 service.无论 uiautomator 或者 selendroid 都对一些协议不支持,所以 rf 会 fail.....async_script 的 501 的错只是一个例子,还会有更多的 status code 错,所以改 appium 的话感觉不太好,毕竟对于 appium 来说它返回的信息是对的,所以改发出请求源头的 rf 会比较好。。。。@seveniruby
@seveniruby 那段代码只会 uiautomator 走到,selendroid 不走那段,走的 proxy.js,各种 status code 错。。。我只有屏蔽那些错才会 pass,但是怕把正常的错也屏蔽了。。。
@seveniruby 是的不只一个返回值错,所以我才说从源头把没支持的 post 屏蔽掉。。。
@lius@seveniruby 请问下如果测试的不是 web 而是手机的程序只用 selenium2library 也可以么,我看 selenium2library 里面没有识别设备的 webdriver 的方法哦
是不是用这个 RobotFramework 运行 appium 用例就可以生成 rf 一样好看的报告呢?
不错,终于也跑起来了
@oscar Hi,我的安装 上面的 keyword,一直提示
[ WARN ] Keyword 'Capture Page Screenshot' could not be run on failure: No browser is open。
但是 keyword 没有 ‘Capture Page Screenshot ’ ,怎么回事呢?
谢谢啊.
#6 楼 @seveniruby Create Dictionary 是什么啊?加载的库 还是自己写的关键字?
#2 楼 @seveniruby 我的 testcase 关键字之间传递参数出现问题,能否帮忙看下,谢谢:
testcase_
open app
sleep 10s
${driver} = open app
sleep 10s
click button ${driver}
脚本是这样的:
def open_app():
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '4.2'
desired_caps['deviceName'] = 'Android Emulator'
desired_caps['appPackage'] = 'com.xxx.xxx'
desired_caps['appActivity'] = '.activity.xxxActivity'
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
sleep(10)
return driver
def click_button(dr):
radio_setting = dr.find_element_by_id('com.xxx.xxx:id/radio_setting')
radio_setting.click()
执行时,第一步 open app 通过,到了 click button 报错:error: Failed to start an Appium session, err was: Error: Requested a new session but one was in progress。请问是什么问题呢?
appium 可以单独使用吗?为什么要和 robotframework 结合使用呀
你好,请问下,起使用 Appium+Robotframework+python;
1.需要导入那些库啊,已经导入了一个 robotframework-appiumlibrary,还有哪些要用的?
2.那些底层的关键字在哪里可以编辑?
求大侠赐教,非常感谢。。。
你好,请问下,使用 Appium+Robotframework+python;
1.需要导入那些库啊,已经导入了一个 robotframework-appiumlibrary,还有哪些要用的?
2.那些底层的关键字在哪里可以编辑?
求大侠赐教,非常感谢。。。
@711child appium 进程在前面一次运行中还没关掉,重新启动下 appium server
response.js 怎么修改。我是也报 Keyword 'Capture Page Screenshot' could not be run on failure: No application is open
求指导@oscar
改了还是不行啊
Keyword 'AppiumLibrary.Open Application' expected 1 to 2 non-keyword arguments, got 5.
Keyword 'AppiumLibrary.Open Application' expected 1 to 2 non-keyword arguments, got 8.
我是运行 appiumLibrary 出现的这个问题 ,没有找到 appium server, 搜索 response.js 文件 发现我的 appium 1.6.5 在 C:\Users\admin\AppData\Local\Programs\appium-desktop\resources\app\node_modules\appium\node_modules\express\lib 这个目录下
我是运行 appiumLibrary 出现的这个问题 ,没有找到 appium server, 搜索 response.js 文件 发现我的 appium 1.6.5 在 C:\Users\admin\AppData\Local\Programs\appium-desktop\resources\app\node_modules\appium\node_modules\express\lib 这个目录下,而且这个文件下没有找到修改前的代码