RobotFrameWork实现模拟手机打开谷歌,浏览手机网页
程序员文章站
2022-06-06 15:59:27
...
一、背景
做ui自动化时,需要测试手机类型的网页。Chrome是可以使用F12,打开控制台,模拟手机模式打开网页的。然后有这个需求,便想使用robot一块做了。
二、方法尝试:
- 使用robot的模拟按键,操作按下F12,快捷键:ctrl+shift+I、ctrl+shift+M,发现模拟按键操作在输入框中生效了,并没有实际按下的效果。
- 使用关键字
Open Context Menu
,打开菜单(目前没找到点击菜单中选项的方法),进入控制台后,点击控制台中的元素进入手机浏览模式,发现根本点击不到。 - 最后想了下打开浏览器的时候直接进入手机浏览模式,搜了一下还真有,参考代码链接https://blog.csdn.net/huilan_same/article/details/52856200 该方法通过python打开,java也是可以的。但是我现在用robot框架写的自动化,需要导入自定义库,自定义关键字才可以。导入自定义库方法参考https://blog.csdn.net/qq_45731111/article/details/104536573
三、遇到的问题
- 代码导入自定义库后,使用封装的关键字可以成功的使用手机浏览模式打开Chrome,但是无法进行下一步操作,页面直接关闭了。 并且我没有添加
close browser
的关键词。以下是我导入自定义库的代码,当时想得太简单了。
- 验证后发现是设置自定义库的问题,因为是直接把代码放进去了,虽然可以直接引用,但是没有增加返回值,不能把当前
driver
的状态return
出来,让后面的操作继续当前状态的driver
继续操作,导致自己封装后,打开网页后自动关闭的情况。,为此需要return
这个driver
- 后来看了一下关键词
open browser
的源代码,这里为了方便截图,把一些描述信息删除了。可以看到源码里面是有返回return driver
的,这个类也需要输入一个入参,这个入参也是官方写好的代码,为了简单实现我们的目的,直接在源码中添加我们的方法。
四、解决
直接模仿关键词open browser
,源码关键字的存在路径(我的是):
D:\python\Lib\site-packages\SeleniumLibrary\keywords
文件夹下的browsermanagement.py
文件。把以下代码粘贴到这个文件里面去,建议放在open browser
的下面,以后容易找到。使用时方法举例:如下图。注意机型的大小写。
- pass:修该代码的时候建议使用python编译器。调试过程出现错误,通过查看报错应该很好解决。
@keyword
def open_browser_mobile(self, url, mobilePhone, alias=None,
remote_url=False, desired_capabilities=None,
ff_profile_dir=None):
"""Opens a new browser instance to the given ``url`` and ``model``.
Examples:
| `Open Browser` | http://example.com | iPhone X |
"""
try:
mobileEmulation = {'deviceName': mobilePhone}
options = webdriver.ChromeOptions()
options.add_experimental_option('mobileEmulation', mobileEmulation)
driver = webdriver.Chrome(executable_path='chromedriver.exe', chrome_options=options)
driver.get(url)
except Exception:
self.ctx.register_driver(driver, alias)
self.debug("Opened browser with session id %s but failed "
"to open url '%s'." % (driver.session_id, url))
raise
self.debug('Opened browser with session id %s.' % driver.session_id)
return self.ctx.register_driver(driver, alias)
五、遗留
后面时间空了附上java代码打开方式。