我正在使用Python将Robot Framework与Appium集成。但是我不知道如何将在Robot Framework中创建的Appium驱动程序传递给自定义python脚本。
我的环境:
Mac OS-小牛 Appium 1.2(通过家庭酿造安装) 最新的机器人框架(通过pip安装) 最新的机器人框架Appium库(通过pip安装) 我在Python中有一个有效的Appium脚本,但是我想开始使用Robot Framework来处理实际测试。
适用于python脚本的部分代码:
wd = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
wd.find_element_by_name("Start").click()
wd.find_element_by_xpath("//UIAApplication[1]/UIAWindow[1]/UIATableView[1]/UIATableCell[1]").click()
wd.execute_script("var vKeyboard = target.frontMostApp().keyboard(); vKeyboard.typeString(\"Test Text\");")
wd.execute_script("var vKeyboard = target.frontMostApp().keyboard(); vKeyboard.buttons()['Return'].tap();")
如您所见,由于应用程序的工作方式,我决定将execute_script用作脚本的一部分。
用于机器人框架的Appium库未公开execute_script,因此我需要在python库中编写自己的库。
这是我的机器人测试脚本的开始,直到我需要execute_script为止,它都可以使用:
TestStart
Open Application ${REMOTE_URL} ${PLATFORM_NAME} ${PLATFORM_VERSION} ${DEVICE_NAME} ${APP}
Click Element name=Start
Click Element xpath=//UIAApplication[1]/UIAWindow[1]/UIATableView[1]/UIATableCell[1]
我的问题是如何获取在Open Application中创建的驱动程序实例并将其传递给Python脚本?
我有一个具有以下内容的python脚本:
def KeyboardType(driver):
driver.execute_script("var vKeyboard = target.frontMostApp().keyboard(); vKeyboard.typeString(\"hi there\");")
但是,我似乎无法将驱动程序从Robot Framework脚本传递到此python脚本。
我尝试通过以下方式将“打开应用程序”设置为变量:
${Driver} Open Application ${REMOTE_URL} ${PLATFORM_NAME} ${PLATFORM_VERSION} ${DEVICE_NAME} ${APP}
KeyboardType ${Driver}
但我收到了错误:
AttributeError:“ str”对象没有属性“ execute_script”
我还尝试将“获取当前上下文”的结果传递到python脚本中,但随后得到:
AttributeError:“ unicode”对象没有属性“ execute_script”
如何将由Robot Framework创建的驱动程序传递到python脚本中?
我目前不使用鸦片,所以我无法给出确切的答案。但是,有人对硒提出了类似的问题,即有人需要实际的webdriver对象。请参阅将现有Webdriver对象传递给Robot Framework的自定义Python库的问题
简短的答案是,您可以尝试对appium库进行子类化,以便您的关键字可以访问所有appium内部构件,或者可以通过调用来获取库的句柄BuiltIn().get_library_instance('Selenium2Library。
有关后一种技术的更多信息,请参见《Robot Framework用户指南》中的从Robot Framework获取活动库实例。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。