欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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的关键词。以下是我导入自定义库的代码,当时想得太简单了。
    RobotFrameWork实现模拟手机打开谷歌,浏览手机网页
  • 验证后发现是设置自定义库的问题,因为是直接把代码放进去了,虽然可以直接引用,但是没有增加返回值,不能把当前driver的状态return出来,让后面的操作继续当前状态的driver继续操作,导致自己封装后,打开网页后自动关闭的情况。,为此需要return这个driver
  • 后来看了一下关键词open browser的源代码,这里为了方便截图,把一些描述信息删除了。可以看到源码里面是有返回return driver的,这个类也需要输入一个入参,这个入参也是官方写好的代码,为了简单实现我们的目的,直接在源码中添加我们的方法。
    RobotFrameWork实现模拟手机打开谷歌,浏览手机网页

四、解决

直接模仿关键词open browser,源码关键字的存在路径(我的是):

D:\python\Lib\site-packages\SeleniumLibrary\keywords

文件夹下的browsermanagement.py文件。把以下代码粘贴到这个文件里面去,建议放在open browser的下面,以后容易找到。使用时方法举例:如下图。注意机型的大小写。

  • pass:修该代码的时候建议使用python编译器。调试过程出现错误,通过查看报错应该很好解决。

RobotFrameWork实现模拟手机打开谷歌,浏览手机网页

@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代码打开方式。

相关标签: RobotFrameWork