【问题标题】:Switching to an iframe on android native and web app using appium via ROBOT framework通过 ROBOT 框架使用 appium 在 android 本机和 Web 应用程序上切换到 iframe
【发布时间】:2020-06-01 08:34:56
【问题描述】:

您好,我一直在互联网上进行大量搜索,以了解我应该如何从 Web 或本机上下文视图切换到 iframe。我正在尝试使用户自动登录到应用程序,并且第三个标识正在生成 OTP。这恰好在 iframe 内,我已经尝试了很多东西来与之交互。首先,我找不到任何关于如何通过关键字(Appium)使用机器人来实现这一点的好的文档,而且我没有很多编程经验来用 python 编写它然后调用它,但我已经尝试过了。

我尝试的第一件事是使用关键字“切换到上下文”和“获取上下文”,我已经在使用它们在本机和 web 视图之间切换:

List Contexts
${contexts}=                              Get Contexts
${native}=                                Get From List           ${contexts}           0
${webview}=                               Get From List           ${contexts}           1  #-1
${chromeviewiframe}                       get from list           ${contexts}           -1  #1
Set Test Variable                         ${native}
Set Test Variable                         ${webview}
set test variable                         ${chromeviewiframe}

#Test Case code
sleep 60 
list contexts
switch to context  ${chromeviewiframe}
wait until element is visible  xpath=//*[@id="btnSMS"]  30
click element  xpath=//*[@id="btnSMS"]

但是它永远不会找到 iframe 或按钮,因此会超时 - 我不确定是否可以使用“获取上下文”来查找 iframe。

我还尝试将他们页面上提供的一点代码 appium 放入我打算调用的 python 文件中,并希望能够切换帧,但这次尝试没有成功

#no idea what library's i am supposed to import and if the return makes sense?
class _frames():
def frame (self):
self.driver.switch_to.frame(3)
return   self.driver.switch_to.frame(3)

我的 iframe xpath 是(删除了一些字符)#iframe //*[@id="xxx2iframe"]

我遇到了以下错误:

手机仍然处于激活状态并且连接没有丢失,但我认为它无法找到 iframe 上下文 - 我无法正确测试 python 文件,因为代码不完整,我不确定我需要做什么来修复它测试那个“解决方案”。我还想知道我是否有另一个文件调用 selenium 并调用 switch frame 关键字,因为它们使用相同的驱动程序,它是否适用于 appium 自动化?我猜不是?

非常感谢您帮助解决这个问题,如果我无法让它自动登录并通过这一点,那么我编写自动化测试用例就没有多大意义了。

亲切的问候,杰姆

【问题讨论】:

    标签: android iframe appium robotframework


    【解决方案1】:

    好吧,如果其他人搜索这个问题,我想出了一个类似于这个问题的解决方案的答案:How to find XPath for button within iframe using python?

    但是它没有关联并解释它如何在机器人框架中使用,所以我所做的是:

    1. 从我的机器人文件中单击(ctrl+click)appium 关键字,打开“_applicationmannagement.py”文件,该文件包含构成 appium 库关键字的所有 python 方法

    2.在python中插入如下方法:

    def frame (self):
      driver = self._current_application()
      driver.switch_to.frame(driver.find_element_by_xpath( "//*[@id=\"xxx2iframe\"]"))
      WebDriverWait(driver, 30).until(EC.element_to_be_clickable(("xpath","//* 
      [@id='btnSMS']"))).click()
    
    1. 然后在我的机器人文件中,我只需通过在测试用例中写入单词“frame”来调用 python 方法框架

    此方法通过使用 xpath 切换到 iframe,然后等待 30 秒才能找到按钮,一旦找到它就会点击它。

    需要指出的一点是,模拟器可能需要重新启动,因为有时它不会在设备上加载 iframe。

    我真的希望这对某人有帮助!

    【讨论】:

      【解决方案2】:

      请将您的默认浏览器设置为 Chrome,然后重新启动设备。之后,Appium 将自动检测 webviews。

      【讨论】:

      • 您好,感谢您的输入,但我需要代码才能真正切换到 iframe 视图,重新启动设备并将默认设置为 chrome 并没有帮助。
      猜你喜欢
      • 2021-06-13
      • 2016-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-07
      • 2015-09-16
      • 2018-07-11
      • 2015-09-24
      相关资源
      最近更新 更多