appium - 在 Appium 中切换上下文后无法选择 WebView 元素
问题描述
在尝试测试 iOS 应用程序时,我遇到了 webdriverio/appium 的一个奇怪问题。该应用程序有一个带有标记为“刷新”的按钮的 WebView。当我尝试测试此按钮时,我收到“未显示”错误(请参阅下面的代码)。
it('should have the Refresh button', () => {
WebViewScreen.waitForWebsiteLoaded();
// Verify that Refresh button is displayed
WebViewScreen.switchToContext(CONTEXT_REF.WEBVIEW);
const button = $('button=Refresh');
expect(button).toBeDisplayed();
WebViewScreen.switchToContext(CONTEXT_REF.NATIVE);
});
请注意,我在测试按钮之前将上下文切换到 WEBVIEW。查看 Appium 日志,查找按钮 ( $('button=Refresh')
) 的请求返回 404。尝试了不同的选择器:['button[data-test="refresh-button"]']
,但没有成功。我什至放了一个 browser.debug() 并在 REPL 中查询 - 仍然是 404 - 虽然我可以在屏幕上实际看到按钮!
我知道我的 webdriverio/appium 设置很好,因为完全相同的代码适用于另一个带有 WebView 和按钮的 iOS 屏幕——唯一的区别是按钮名称。
通过转到独立网页并测试该按钮,我还排除了我的选择器不正确的可能性 - 在这种情况下没有错误!这是独立的网页代码 - 唯一的区别是没有上下文切换调用:
it('should have the Refresh button', () => {
browser.url('https://example.site.com/');
// Verify that Refresh button is displayed
const button = $('button=Refresh')
expect(button).toBeDisplayed();
});
关于如何调试的任何想法?切换到我缺少的 WEBVIEW 上下文是否有任何细微差别?
解决方案
终于在这一点上有所突破——感谢Alexi在Appium论坛上的建议。事实证明,我的应用程序中有多个 WebView,我必须将上下文切换到正确的。诀窍是fullContextList
在 Appium 上设置选项以获取有关可用上下文的更多信息,然后选择正确的。
推荐阅读
- python - 在 Windows 中 Python 网络抓取和下载特定的 zip 文件
- android - 使用Layer-List,当放在按钮上时所有项目的颜色都被忽略
- node.js - dockerode,如何使容器中运行的进程独立于节点进程?
- java - Spring Boot Maven 集成测试给出 ClassNotFoundException
- c# - 如何从作为对象的选定 ListItem 中获取电子邮件
- linux - 如何在 Linux 上为 gstreamer 安装 video.h?
- android - 如何在 Android 工具栏中为标题添加阴影?
- java - 我想在我的 cardview+RecyclerView 中显示 Title、Description 和 Price,而它只显示 Title
- python-3.x - 计算特定时间段的列值
- linux - rsync 与 chmod 到远程目标不会允许文件权限