Android Robotium соло - как получить доступ к веб-элементам, содержащимся в IFRAME? - PullRequest
0 голосов
/ 03 декабря 2018

Сценарий: Я использую Android Robotium Solo (v5.6.3) для автоматизации взаимодействия веб-страниц в моем приложении.Мне нужно автоматизировать ввод данных в поля INPUT, содержащиеся в IFRAME, но мне не везет!

Проблема: Когда я пытаюсь использовать, например, solo.waitForWebElement(By.id ("номер комнаты", 5000, true) и solo.typeTextInWebElement (By.id ("номер комнаты", "101"), соло не может найти элемент.

обсуждение этой связанной проблемы «Доступ к iFrame внутри WebView # 794» (https://github.com/RobotiumTech/robotium/issues/794), предполагает, что можно использовать «solo.getConfig (). webFrame = XXX», чтобы сосредоточиться на содержании определенного IFRAME изатем доступ к WebElements. К сожалению, я не смог заставить его работать и не смог найти полных примеров. Я предполагаю, что XXX, возможно, должен быть «id» IFRAME, но в моем сценарии (гдеУ меня нет контроля над исходным кодом для автоматизируемых веб-страниц) тегу IFRAME не присвоен идентификатор.

Я создал простой пример тестового сценария:

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 - источник для IFRAME, который содержит элемент INPUT.

<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 голосов
/ 03 декабря 2018

После более подробного изучения исходного кода для Robotium я подтвердил, что использование

solo.getConfig().webFrame = ['id' of IFRAME as a String]

позволяет последующим вызовам solo.typeTextInWebElement и т. Д. Работать нормально, как и ожидалось.

Хитрость вМой сценарий заключается в том, что родительская страница не присвоила идентификатор для IFRAME, поэтому я программно назначаю его во время выполнения, используя следующий javascript

document.getElementsByTagName("iframe")[0].id = "test";

, а затем использую

solo.getConfig().webFrame = "test"
...