Appium Appium 1.9 版本 BUG:使用 get_window_size () 方法报错

Rick_Zhang · 2018年10月12日 · 最后由 海勇 回复于 2020年06月04日 · 3764 次阅读

现象

Appium 1.9 版本使用 driver.get_window_size() 会报错,提示 selenium.common.exceptions.WebDriverException: Message: The URL '/wd/hub/session/2763af95-8c0c-4533-8b73-0eae25e5a026/window/size' did not map to a valid resource
(在 appium 1.4 版本执行 get_window_size 方法没有问题,可以得到正确返回,应该是 1.9 版本的 bug, 1.9 版本改变了执行 get_window_size 方法对应的 GET 请求地址)

环境

Appium 1.9
Python 3.6.1
Selenium 3.6.0

Appium Log

[HTTP] --> GET /wd/hub/session/2763af95-8c0c-4533-8b73-0eae25e5a026/window/size
[HTTP] {}
[HTTP] No route found. Setting content type to 'text/plain'
[HTTP] <-- GET /wd/hub/session/2763af95-8c0c-4533-8b73-0eae25e5a026/window/size 404 1 ms - 106

解决方法

通过查看官方文档和 appium log 得知,当执行 driver.get_window_size() 时,Python 脚本通过向地址 “http://127.0.0.1:4723/wd/hub/session/:session_id/window/size” 发送 get 请求给 appium-server,appium-server 再发送命令给 mobile 获得 mobile 返回的 window_size,然后返回给 client。
查看官方文档:get_window_size 方法的实际请求地址为: /wd/hub/session/:session_id/window/:window_handle/size
参考:http://appium.io/docs/en/commands/web/window/get-window-size/index.html#appium-clients

通过追踪 selenium 源码,发现在执行 get_window_size 时发送的请求 URL 为:
/session/$sessionId/window/size
源码路径:python-path\Lib\site-packages\selenium\webdriver\remote\remote_connection.py (353 行)

对比得知,selenium get_window_size 方法请求的 URL 和 appium 执行 get_window_size 方法对应的路径不同,通过修改 selenium 源码变更 get_window_size 的请求路径为:
Command.W3C_GET_WINDOW_SIZE: ('GET', '/session/$sessionId/window/$windowHandle/size'),

结果

再次执行 driver.get_window_size(),得到正确返回。

共收到 4 条回复 时间 点赞

好贴啊,为啥没人赞,都没人踩到过坑么

我来点赞啦 确实踩过坑

救我于水火,感谢大佬!

谢谢大佬,完美解决!我的是 Appium 1.6

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册