通过 ROBOT 框架使用 appium 在 android 本机和网络应用程序上切换到 iframe
Switching to an iframe on android native and web app using appium via ROBOT framework
您好,我在互联网上进行了大量搜索,以了解如何从 Web 或本机上下文视图切换到 iframe。我正在尝试使用户自动登录到应用程序,而第三个标识是生成 OTP。这恰好在 iframe 中,我已经尝试了很多方法来与之交互。首先,我找不到任何关于如何使用机器人通过关键字 (Appium) 实现此目的的好文档,而且我没有很多编程经验来将它写在 python 中然后调用它,但我已经尝试过了。
我尝试的第一件事是使用关键字 'switch to context' 和 'get contexts',我已经使用它们在本机视图和 webview 之间切换:
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 或按钮,因此超时 - 我不确定 'get contexts' 是否可用于查找 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 是(x'd out some characters)#iframe //*[@id="xxx2iframe"]
我遇到了以下错误:
phone 仍然激活并且连接没有丢失,但我认为它只是找不到 iframe 上下文 - 我无法正确测试 python 文件,因为代码没有完成而且我没有确定我需要做些什么来修复它以测试 'solution'。我还想知道我是否有另一个文件调用 selenium 并调用 switch frame 关键字它是否适用于 appium 自动化,因为它们使用相同的驱动程序?我假设不是?
非常感谢帮助解决这个问题,如果我不能让它自动登录并通过这一点,那么我编写自动化测试用例就没有多大意义了。
亲切的问候,杰姆
请将您的默认浏览器设置为Chrome,然后重启设备。之后,Appium 将自动检测 webviews。
好的,所以如果其他人搜索这个问题,我会得到一个类似于这个问题的答案的答案:
但是它没有涉及并解释如何在 Robot 框架中使用它,所以我所做的是:
- 单击(ctrl+单击)我的机器人文件中的 appium 关键字,打开“_applicationmannagement.py”文件,其中包含构成 appium 库关键字的所有 python 方法
2.Inserted 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()
- 然后在我的机器人文件中,我只需将单词 'frame' 作为测试用例的一部分来调用 python 方法框架
此方法使用 xpath 切换到 iframe,然后等待 30 秒找到按钮,一旦找到就点击它。
需要指出的一点是模拟器可能需要重新启动,因为在某一时刻它不会在设备上加载 iframe。
我真的希望这对某人有所帮助!
您好,我在互联网上进行了大量搜索,以了解如何从 Web 或本机上下文视图切换到 iframe。我正在尝试使用户自动登录到应用程序,而第三个标识是生成 OTP。这恰好在 iframe 中,我已经尝试了很多方法来与之交互。首先,我找不到任何关于如何使用机器人通过关键字 (Appium) 实现此目的的好文档,而且我没有很多编程经验来将它写在 python 中然后调用它,但我已经尝试过了。
我尝试的第一件事是使用关键字 'switch to context' 和 'get contexts',我已经使用它们在本机视图和 webview 之间切换:
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 或按钮,因此超时 - 我不确定 'get contexts' 是否可用于查找 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 是(x'd out some characters)#iframe //*[@id="xxx2iframe"]
我遇到了以下错误:
phone 仍然激活并且连接没有丢失,但我认为它只是找不到 iframe 上下文 - 我无法正确测试 python 文件,因为代码没有完成而且我没有确定我需要做些什么来修复它以测试 'solution'。我还想知道我是否有另一个文件调用 selenium 并调用 switch frame 关键字它是否适用于 appium 自动化,因为它们使用相同的驱动程序?我假设不是?
非常感谢帮助解决这个问题,如果我不能让它自动登录并通过这一点,那么我编写自动化测试用例就没有多大意义了。
亲切的问候,杰姆
请将您的默认浏览器设置为Chrome,然后重启设备。之后,Appium 将自动检测 webviews。
好的,所以如果其他人搜索这个问题,我会得到一个类似于这个问题的答案的答案:
但是它没有涉及并解释如何在 Robot 框架中使用它,所以我所做的是:
- 单击(ctrl+单击)我的机器人文件中的 appium 关键字,打开“_applicationmannagement.py”文件,其中包含构成 appium 库关键字的所有 python 方法
2.Inserted 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()
- 然后在我的机器人文件中,我只需将单词 'frame' 作为测试用例的一部分来调用 python 方法框架
此方法使用 xpath 切换到 iframe,然后等待 30 秒找到按钮,一旦找到就点击它。
需要指出的一点是模拟器可能需要重新启动,因为在某一时刻它不会在设备上加载 iframe。
我真的希望这对某人有所帮助!