【问题标题】:Passing WebDriver's Browser instance to JavaScript in Appium将 WebDriver 的浏览器实例传递给 Appium 中的 JavaScript
【发布时间】:2020-03-01 23:06:32
【问题描述】:

我正在测试一个基于 Hybrid Application Canvas 的 Android 手机应用程序,我必须测试的大部分功能都是基于 Canvas 的,我唯一的方法是使用 JavaScript 从 Python 脚本中调用。

在执行 Javascript 之前,我使用 set Contexts 将 Phones Native View 转换为 Web View

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 可以正常工作并执行某些操作。

现在;如果我想获取页面信息(之前是使用 nightwatch 完成的)

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

所以在我看来,我认为应该有某种方法可以传递浏览器实例,我可以在该实例上运行命令。

【问题讨论】:

    标签: javascript appium-android python-appium


    【解决方案1】:

    它们是不同的上下文。 this.browser 不可用。您需要通过driverexecute_script 执行page.YourPage(); 尝试执行的任何操作。

    【讨论】:

    • Jquery 是操作当前文档的合适上下文。
    • @Jess 我知道上下文不同,但我不知道如何通过 execute_script 直接完成此操作。
    • @Manmohan_singh 你能给我一些示例工作 sn-p 或任何链接请
    猜你喜欢
    • 2014-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多