场景: 我正在使用Android Robotium Solo(v5.6.3)在我的应用程序中自动进行网页交互。我需要自动将数据输入到IFRAME中包含的INPUT字段中,但是运气不高!
问题: 当我尝试使用例如solo.waitForWebElement(By.id(“ room-number”,5000,true)和solo.typeTextInWebElement(By.id(“ room-number”,“ 101”)时,solo无法找到元素。
有关此相关问题的讨论“在WebView#794中访问iFrame”(https://github.com/RobotiumTech/robotium/issues/794),建议可以使用“ solo.getConfig()。webFrame = XXX”将内容单独关注特定IFRAME,然后访问WebElement。不幸的是,我无法使其正常运行,也无法找到任何完整的示例。我认为XXX可能需要作为IFRAME的“ id”,但在我的情况下(我无法控制要自动化的网页的源代码),IFRAME标签没有分配ID。
我创建了一个简单的示例测试场景:
index.html -托管IFRAME的主页
<html>
<body bgcolor="#AA3333">
<div id="wrapper">
<iframe src="embed.html" width="100%" height="100%" frameborder="0"></iframe>
</div>
</body>
</html>
embed.html -包含INPUT元素的IFRAME的源。
<html>
<body bgcolor="#3333AA">
<div id="page-container" style="height:100vh; width:100%;">
<label>Room Number</label>
<input type="text" name="ROOM_NUMBER" id="room-number">
</div>
</body>
</html>
答案 0 :(得分:0)
在更详细地查看了Robotium的源代码之后,我确认使用了
solo.getConfig().webFrame = ['id' of IFRAME as a String]
允许随后对solo.typeTextInWebElement等的调用按预期正常运行。
在我的场景中,技巧是父页面没有为IFRAME分配ID,因此我在运行时使用以下javascript编程分配了ID
document.getElementsByTagName("iframe")[0].id = "test";
然后使用
solo.getConfig().webFrame = "test"