将WebDriver的Browser实例传递给Appium中的JavaScript

时间:2019-11-05 14:37:28

标签: javascript appium-android python-appium

我正在测试一个基于Hybrid Application Canvas的Android Phone应用程序,我要测试的大多数功能都是基于Canvas的,而我唯一的方法就是使用从Python脚本调用的JavaScript。

在执行Javascript之前,我通过使用设置上下文将Phones本机视图转换为Web视图

def set_current_context(self, num_ctx):
        self.driver.switch_to.context(self.driver.contexts[int(num_ctx)])

def set_serial(self, android_serial):
        desired_caps = self.getDevice(android_serial)
        self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
        return self.driver

诸如“ document.title”或“ window.xyz”之类的基本JavaScript可以正常工作并执行某些操作。

现在;如果我想获取页面信息(以前使用夜视仪完成此操作)

this.browser.page.YourPage(); // Nightwatch javascript

但是如果我直接发送上述命令,则会收到错误JavascriptException: Message: javascript error: Cannot read property 'page' of undefined

def direct_script(self, script, *args):
        print(script, *args)
        self.driver.execute_script("$(document).ready (function (){ this.browser.page.YourPage() });", *args)

我是从浏览器的控制台手动检查的,其中this.browser返回了undefined

因此,我认为应该以某种方式传递可以在其上运行命令的浏览器实例。

1 个答案:

答案 0 :(得分:3)

它们是不同的上下文。 this.browser不可用。您将需要page.YourPage();通过driverexecute_script做任何事情。