Команда селена RC клик застревает - PullRequest
3 голосов
/ 11 апреля 2011

Решение: Сегодня (2011-04-13) Selenium RC плохо обрабатывает окна подтверждения в Firefox 4.Мне пришлось вернуться к Firefox 3.16, и тогда эта проблема исчезла.Еще раз спасибо.

Оригинальный вопрос:

Hello Selenium gurus,

Я пытаюсь выполнить автоматический тест браузера из Java с использованием Selenium 2.0b3 в качестве клиента Java и отдельного сервератоже.
Сервер запускает Firefox 4 с определенным профилем.

Тест застревает по команде "click";он ждет и не происходит тайм-аут / исключение / любая ошибка.Во время этого клика появляется окно подтверждения, поэтому я думаю, что это проблема, но я не знаю, почему это застревает.В Selenium IDE появляется не это окно подтверждения, только в RC.

Проблема не в том, что щелчок не происходит (потому что появляется окно подтверждения), а в том, что это окно подтверждения зависает.Я пробовал это, но не помогло:

selenium.click("css=div[id=command_Delete]");
selenium.click("id=command_Delete");
String JSscript = "jQuery('#command_Delete').click();" // See http://api.jquery.com/click/
selenium.runScript(JSscript);

Это просто способы, как начать клик.Может быть, я должен начать другую тему по этой ссылке: http://www.sqaforums.com/showflat.php?Cat=0&Number=567974&an=&page=0&vc=1

Спасибо: Andras

Java-код:

selenium.click("//div[@id='command_Delete']/span");
//stucks here
//so this is not reached:
String confirmation = selenium.getConfirmation();

HTML:

<div id="command_Delete" class="...">
    <div>...</div>
    <span>Delete</span>
    <div>...</div>
    <br><br>
</div>

Javascript:

<script type="text/javascript">
    $('command_Delete').addEvent('click',function(){
        var isConfirmTrue = confirm('Do you want to delete?');
        if (isConfirmTrue) {
            var myForm = getFormObj(document, "deleteForm");
            submitForm(myForm);
        }
    });
</script>

А на Java он зависает в ожидании ответа selenium rc:

HttpURLConnection.getInputStream() line: 912 [local variables unavailable]  
HttpURLConnection(HttpURLConnection).getResponseCode() line: 367 [local variables unavailable]  
HttpCommandProcessor.getResponseCode(HttpURLConnection) line: 147   
HttpCommandProcessor.getCommandResponseAsString(String) line: 167   
HttpCommandProcessor.executeCommandOnServlet(String) line: 107  
HttpCommandProcessor.doCommand(String, String[]) line: 89   
DefaultSelenium.click(String) line: 167 
...

Ответы [ 3 ]

1 голос
/ 12 апреля 2011

Если появляется окно подтверждения, тест блокируется, пока это поле подтверждения не будет удалено.Вы можете выполнить быструю ручную проверку, чтобы определить, является ли это вашей проблемой.

Запустите тест и, когда появится окно подтверждения, вручную, если с ним все будет в порядке, если все остальное в порядке, тест следует продолжить с этой точки, какпо норме.

Selenium ожидает загрузки страницы, но всплывающее окно блокирует загрузку страницы, что в итоге приводит к тайм-ауту.

Вы можете попытаться обойти этоиспользование selenium.chooseOkOnNextConfirmation ();до вашего клика.

1 голос
/ 11 апреля 2011

Вы пытались заменить

selenium.click("//div[@id='command_Delete']/span");

на

selenium.click("id=command_Delete");

?

Мне кажется, что поскольку событие привязано к самому div,должно работать.

Кроме того, вы можете выполнить действие click напрямую, выполнив это. Я использую jQuery, так как вы, кажется, уже загрузили его на страницу, и это облегчает работу (особенно для перекрестного доступа).тестирование браузера):

String JSscript = "jQuery('#command_Delete').click();" // See http://api.jquery.com/click/
selenium.runScript(JSscript);

Вам просто нужно оценить, подходит ли вам это решение.

0 голосов
/ 11 апреля 2011

Вы уверены, что ваш виджет может позволить себе клик?

Я бы попробовал идентификатор CSS:

selenium.click("css=div[id=command_Delete]");
...