Android Robotium单独-如何访问IFRAME中包含的WebElement?

时间:2018-12-03 03:28:55

标签: android robotium

场景: 我正在使用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>

1 个答案:

答案 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"