现象
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.10.0
Python 3.7
Selenium 3.3.1
Appium Log
[HTTP] --> GET /wd/hub/session/2763af95-8c0c-4533-8b73-0eae25e5a026/window/size
[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
对比得知,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(),得到正确返回。