Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Успешный клик, но timeout при попытке дождаться stringContentsOfInputStream


(densaface) #1

 

День добрый.
 
имеются 2 машины: на одной проект на яве в эклипс, на другой селениум сервер (первой версии), на котором происходит тестирование вебприложения. В целом все нормально работает, но почему-то не вполне корректно происходит клик по ссылке, которая в html виде выглядит как
 
<td class="MsgBarMsg" nowrap="nowrap">
<span class="StatusBarLetr">Information:</span>The Containers have been scheduled for creation. 
(<a onmouseover="callTip('get_op_details',event)" onmouseout="callTip()" href="javascript:open_details('https://bla_bla');">Details</a>)
</td>
 
Клик происходит следующим образом:
 
        setLocator( "css=a:contains(\"^Details$\")" );
...
commandProcessor.doCommand("click", new String[] {locator,} );
 
если посмотреть дебаггером при пошаговом проходе, то в doCommand вызывается executeCommandOnServlet("cmd=click&1=css%3Da%3Acontains%28%22%5EDetails%24%22%29"), который в свою очередь вызывает getCommandResponseAsString("cmd=click&1=css%3Da%3Acontains%28%22%5EDetails%24%22%29"), который выглядит следующим образом
 
    protected String getCommandResponseAsString(String command) throws IOException {
        String responseString = null;
        int responsecode = HttpURLConnection.HTTP_MOVED_PERM;
        HttpURLConnection uc = null;
        Writer wr = null;
        Reader rdr = null;
        while (responsecode == HttpURLConnection.HTTP_MOVED_PERM) {
            URL result = new URL(pathToServlet); 
            String body = buildCommandBody(command);
            try {
                uc = getHttpUrlConnection(result);
                uc.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
                uc.setInstanceFollowRedirects(false);
                uc.setDoOutput(true);
                wr = getOutputStreamWriter(uc);;
                wr.write(body);
                wr.flush();
                responsecode = getResponseCode(uc); >>> responsecode равен HttpURLConnection.HTTP_OK, клик успешно совершается, на странице открывается popup окно
                if (responsecode == HttpURLConnection.HTTP_MOVED_PERM) {
                    pathToServlet = uc.getRequestProperty("Location");
                } else if (responsecode != HttpURLConnection.HTTP_OK) {
                    throwAssertionFailureExceptionOrError(uc.getResponseMessage());
                } else {
                    rdr = getInputStreamReader(uc);
                    responseString = stringContentsOfInputStream(rdr); >>>> responseString = "Timed out after 50000ms", из-за этого commandProcessor.doCommand инициирует exeption и клик засчитывается как неуспешный
                }
            } finally {
              closeResources(uc, wr, rdr);
            }
        }
        return responseString;
    }
 
Вопрос, почему при успешном клике не удается считать responseString и как это можно обойти?

 


(Mykhailo Poliarush) #2

ваш последний вопрос, как-то запутал

давайте определимся с вашей проблемой, потому что я ее не до конца понял

вы просто не можете нажать на ссылку?


(densaface) #3

Спасибо. Оказывается первая версия селениум сервера поддерживает FireFox не выше 3.6, но в нем проблемы с тестируемым вебприложением. Поэтому пришлось перейти на селениум сервер 2 + FF11.х Проблемные клики, описанные выше, совершаются без проблем. 


(Mykhailo Poliarush) #4

ну вот видите, новая версия selenium Вам пригодилась

какие ощущения после selenium RC?


(densaface) #5

Ощущения положительные, но никак не сложится общей методики определения имен локаторов, в частности в случае сложных таблиц с чекбоксами. Еще немного помучаюсь и буду сюда писать о наболевшем))


(densaface) #6

буду благодарен если подскажите ресурс для начинающего как подбирать локаторы и описывать их на java


(Mykhailo Poliarush) #7

я думаю эта ссылка Вам поможет

http://automated-testing.info/trainings/video-kak-pisat-lokatory-dlya-selenium-webdriver/report