2013-05-15 2 views
1

Я тестирую страницу входа. В определенные моменты времени (чтение прерывисто) загрузка домашней страницы занимает бесконечное время. В этом случае ниже команда никогда не завершается -Webdriver - Бесконечная загрузка нагрузок

driver.findElement(By.id("Login")).submit(); 

Я знаю как неявных & явных ожиданий. Эти ожидания применимы только для findElement или DOM соответствующих действий, но не для команды представить ((Ref: https://sqa.stackexchange.com/questions/2606/what-is-seleniums-default-timeout-for-page-loading)

Debug Log Trace -

15 May 2013 16:42:08 DEBUG wire:77 - << "{"name":"submitElement","sessionId":"949f6c8f-a8fc-4e13-b4da-bf6c19c893fe","status":0,"value":""}" 
15 May 2013 16:42:08 DEBUG DefaultClientConnection:152 - Connection shut down 
15 May 2013 16:42:08 DEBUG ThreadSafeClientConnManager:272 - Released connection is not reusable. 
15 May 2013 16:42:08 DEBUG ConnPoolByRoute:434 - Releasing connection [HttpRoute[{}->http://127.0.0.1:7055]][null] 
15 May 2013 16:42:08 DEBUG ConnPoolByRoute:679 - Notifying no-one, there are no waiting threads 
15 May 2013 16:42:08 DEBUG SalesForce:153 - Verify next page 
15 May 2013 16:42:08 DEBUG ThreadSafeClientConnManager:221 - Get connection: HttpRoute[{}->http://127.0.0.1:7055], timeout = 120000 
15 May 2013 16:42:08 DEBUG ConnPoolByRoute:350 - [HttpRoute[{}->http://127.0.0.1:7055]] total kept alive: 0, total issued: 0, total allocated: 0 out of 2000 
15 May 2013 16:42:08 DEBUG ConnPoolByRoute:523 - No free connections [HttpRoute[{}->http://127.0.0.1:7055]][null] 
15 May 2013 16:42:08 DEBUG ConnPoolByRoute:369 - Available capacity: 2000 out of 2000 [HttpRoute[{}->http://127.0.0.1:7055]][null] 
15 May 2013 16:42:08 DEBUG ConnPoolByRoute:549 - Creating new connection [HttpRoute[{}->http://127.0.0.1:7055]] 
15 May 2013 16:42:08 DEBUG DefaultClientConnectionOperator:145 - Connecting to 127.0.0.1:7055 
15 May 2013 16:42:08 DEBUG RequestAddCookies:132 - CookieSpec selected: best-match 
15 May 2013 16:42:08 DEBUG RequestAuthCache:75 - Auth cache not set in the context 
15 May 2013 16:42:08 DEBUG DefaultHttpClient:643 - Attempt 1 to execute request 
15 May 2013 16:42:08 DEBUG DefaultClientConnection:264 - Sending request: GET /hub/session/949f6c8f-a8fc-4e13-b4da-bf6c19c893fe/title HTTP/1.1 
15 May 2013 16:42:08 DEBUG wire:63 - >> "GET /hub/session/949f6c8f-a8fc-4e13-b4da-bf6c19c893fe/title HTTP/1.1[\r][\n]" 
15 May 2013 16:42:08 DEBUG wire:63 - >> "Accept: application/json, image/png[\r][\n]" 
15 May 2013 16:42:08 DEBUG wire:63 - >> "Cache-Control: no-cache[\r][\n]" 
15 May 2013 16:42:08 DEBUG wire:63 - >> "Host: 127.0.0.1:7055[\r][\n]" 
15 May 2013 16:42:08 DEBUG wire:63 - >> "Connection: Keep-Alive[\r][\n]" 
15 May 2013 16:42:08 DEBUG wire:63 - >> "[\r][\n]" 
15 May 2013 16:42:08 DEBUG headers:268 - >> GET /hub/session/949f6c8f-a8fc-4e13-b4da-bf6c19c893fe/title HTTP/1.1 
15 May 2013 16:42:08 DEBUG headers:271 - >> Accept: application/json, image/png 
15 May 2013 16:42:08 DEBUG headers:271 - >> Cache-Control: no-cache 
15 May 2013 16:42:08 DEBUG headers:271 - >> Host: 127.0.0.1:7055 
15 May 2013 16:42:08 DEBUG headers:271 - >> Connection: Keep-Alive 

В основном DefaultClientConnection не получает 200 OK & в команда просто зависает.

Ищете решение, чтобы закрыть браузер в случае отсутствия ответа от браузера для отправить команду после waitin г в течение определенной продолжительности.

+0

Вы имеете в виду как driver.close()? –

+0

ничего. Я просто хотел бы перейти в следующий оператор в случае этого сценария после определенного ожидания – praneel

ответ

0

Я предполагаю, что идентификатор «Вход» - это форма.

Не могли бы вы выбрать кнопку отправки формы (если она существует) и вызвать кнопку .click() на кнопке, а не называть .submit() в форме?

И тогда вы должны иметь возможность использовать неявные или явные ожидания.

EDIT:

После отправки формы, вы можете сделать специальный метод, чтобы ждать ответа, и закрыть браузер после тайм-аута, если это необходимо.

 int tryCount = 0; 
     boolean desiredResponseReceived = false; 
     while (desiredResponseReceived == false && tryCount < 20) { 
      String statusText = (String) js.executeScript("return xhr.statusText;"); 
      if (statusText.indexOf("200") != -1) { 
       desiredResponseReceived = true; 
      } 
      else { 
       Thread.sleep(250); 
       tryCount++; 
      } 
     } 

     if (desiredResponseReceived == false) { 
      driver.quit(); 
     } 

Как указано, этот метод закроет браузер, если «200» не появляется в ответе xhr в течение 5 секунд. (потому что он проверяет каждые 250 миллисекунд, 20 раз, прежде чем он наконец достигнет if (desiredResponseReceived == false) и закрывает браузер).

+0

Да, звучит как хорошее предложение. Позвольте мне попробовать и обновить – praneel

+0

Пробовал вариант щелчка. Тот же результат с помощью либо click(), либо submit(). Нет изменения n поведения – praneel

+0

Я отредактировал свой ответ, чтобы подождать «200» в ответе, а затем таймаут. –

Смежные вопросы