2016-04-16 1 views
1
  • Узел Версия: 5.10.1
  • транспортир Версия: 3.2.2
  • Browser: firefox v. 45.0.2
  • Операционная система Windows 8.1 x64
  • угловой на веб-приложения " 1.5.0 '
  • Селен-сервер' selenium-server-standalone-2.53.0 '

Я новичок в транспортирнике, и мой английский плохой. Ситуация: У меня есть тест (на самом деле набор тестов), который проходит против хром, но почти сразу же висит от firefox, он зависает после кликов по ссылке, после того, как это должно быть сделано. ПримерТесты висят при работе с Firefox, но одни и те же тесты сплошь работают с хромом

Тест:

var homePageAddress = 'http://localhost'; 

var someLink = element(by.css('.navigationpanel-element[translate="SomeText.SomeText"]')); 
var someTitle = element(by.css('.titlepanel-title-first[translate="omeText.SomeText"]')); 
var someOtherLink = element(by.css('[translate="SomeText.SomeText"]')); 
var someSearchBox = element(by.css('input.search-box')); 
var listOfItems = element(by.css('li.list-item')); 

browser.get(homePageAddress); 

someLink.click(); 
//It hangs here in firefox 
expect(someTitle.isDisplayed()).toEqual(true, 'Some result text'); 
expect(someOtherLink.isDisplayed()).toEqual(true, 'Some result text'); 
expect(someSearchBox.isDisplayed()).toEqual(true, 'Some result text'); 
expect(listOfItems.isPresent()).toEqual(true, 'Some result text'); 

conf.js:

exports.config = { 
    directConnect: true, 

    capabilities: { 
     'browserName': 'firefox' 
    }, 
    framework: 'jasmine2', 

    specs: ['chromeOrganizationCreation.js'], 

    jasmineNodeOpts: { 
     defaultTimeoutInterval: 30000 
    }, 

    onPrepare: function() { 
     require('./waitReady.js'); 
    } 
}; 

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

журнал транспортир говорит:

A Jasmine spec timed out. Resetting the WebDriver Control Flow. 
Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL. 

Увеличение тайм-аута не дает результата, поведение то же самое.

Кусок журнала селен сервера (конец его):

09:49:56.693 DEBUG [20] org.apache.http.wire - http-outgoing-11 << "{"name":"clickElement","sessionId":"c9f64f66-fc8c-4f3d-a0be-535b63370dd0","status":0,"value":"ok"}" 
    09:49:56.693 DEBUG [20] org.apache.http.impl.conn.DefaultManagedHttpClientConnection - http-outgoing-11: Close connection 
    09:49:56.693 DEBUG [20] org.apache.http.impl.execchain.MainClientExec - Connection discarded 
    09:49:56.694 DEBUG [20] org.apache.http.impl.conn.PoolingHttpClientConnectionManager - Connection released: [id: 11][route: {}->http://127.0.0.1:7055][total kept alive: 0; route allocated: 0 of 2000; total allocated: 0 of 2000] 
    09:49:56.695 DEBUG [20] org.openqa.selenium.remote.RemoteWebDriver - Executed: [c9f64f66-fc8c-4f3d-a0be-535b63370dd0, clickElement {id={c0ac812d-747e-4bf9-9678-ae6025d656c1}}] 
    09:49:56.695 INFO [14] org.openqa.selenium.remote.server.DriverServlet - Done: [click: 0 [[FirefoxDriver: firefox on WINDOWS (c9f64f66-fc8c-4f3d-a0be-535b63370dd0)] -> css selector: .navigationpanel-element[translate="SomeText.SomeText"]]] 
    09:49:56.700 DEBUG [14] org.openqa.selenium.remote.server.DriverServlet - Finished: POST /session/e92fa9f1-8822-4f27-85a2-9f929d484e4a/element/0/click 
    09:49:56.710 DEBUG [14] org.openqa.selenium.remote.server.DriverServlet - Handling: POST /session/e92fa9f1-8822-4f27-85a2-9f929d484e4a/execute_async 
    09:49:56.712 INFO [14] org.openqa.selenium.remote.server.DriverServlet - Executing: [execute async script: try { return (function (rootSelector, callback) { 
     var el = document.querySelector(rootSelector); 

     try { 
     if (window.getAngularTestability) { 
      window.getAngularTestability(el).whenStable(callback); 
      return; 
     } 
     if (!window.angular) { 
      throw new Error('window.angular is undefined. This could be either ' + 
       'because this is a non-angular page or because your test involves ' + 
       'client-side navigation, which can interfere with Protractor\'s ' + 
       'bootstrapping. See http://git.io/v4gXM for details'); 
     } 
     if (angular.getTestability) { 
      angular.getTestability(el).whenStable(callback); 
     } else { 
      if (!angular.element(el).injector()) { 
      throw new Error('root element (' + rootSelector + ') has no injector.' + 
       ' this may mean it is not inside ng-app.'); 
      } 
      angular.element(el).injector().get('$browser'). 
       notifyWhenNoOutstandingRequests(callback); 
     } 
     } catch (err) { 
     callback(err.message); 
     } 
    }).apply(this, arguments); } 
    catch(e) { throw (e instanceof Error) ? e : new Error(e); }, [body.ng-scope]]) 
    09:49:56.713 DEBUG [20] org.openqa.selenium.remote.RemoteWebDriver - Executing: executeAsyncScript [c9f64f66-fc8c-4f3d-a0be-535b63370dd0, executeAsyncScript {script=try { return (function (rootSelector, callback) { 
     var el = document.querySelector(rootSelector); 

     try { 
     if (window.getAngularTestability) { 
      window.getAngularTestability(el).whenStable(callback); 
      return; 
     } 
     if (!window.angular) { 
      throw new Error('window.angular is undefined. This could be either ' + 
       'because this is a non-angular page or because your test involves ' + 
       'client-side navigation, which can interfere with Protractor\'s ' + 
       'bootstrapping. See http://git.io/v4gXM for details'); 
     } 
     if (angular.getTestability) { 
      angular.getTestability(el).whenStable(callback); 
     } else { 
      if (!angular.element(el).injector()) { 
      throw new Error('root element (' + rootSelector + ') has no injector.' + 
       ' this may mean it is not inside ng-app.'); 
      } 
      angular.element(el).injector().get('$browser'). 
       notifyWhenNoOutstandingRequests(callback); 
     } 
     } catch (err) { 
     callback(err.message); 
     } 
    }).apply(this, arguments); } 
    catch(e) { throw (e instanceof Error) ? e : new Error(e); }, args=[body.ng-scope]}] 
    09:49:56.714 DEBUG [20] org.apache.http.client.protocol.RequestAddCookies - CookieSpec selected: default 
    09:49:56.715 DEBUG [20] org.apache.http.client.protocol.RequestAuthCache - Auth cache not set in the context 
    09:49:56.715 DEBUG [20] org.apache.http.impl.conn.PoolingHttpClientConnectionManager - Connection request: [route: {}->http://127.0.0.1:7055][total kept alive: 0; route allocated: 0 of 2000; total allocated: 0 of 2000] 
    09:49:56.715 DEBUG [20] org.apache.http.impl.conn.PoolingHttpClientConnectionManager - Connection leased: [id: 12][route: {}->http://127.0.0.1:7055][total kept alive: 0; route allocated: 1 of 2000; total allocated: 1 of 2000] 
    09:49:56.715 DEBUG [20] org.apache.http.impl.execchain.MainClientExec - Opening connection {}->http://127.0.0.1:7055 
    09:49:56.716 DEBUG [20] org.apache.http.impl.conn.DefaultHttpClientConnectionOperator - Connecting to /127.0.0.1:7055 
    09:49:56.716 DEBUG [20] org.apache.http.impl.conn.DefaultHttpClientConnectionOperator - Connection established 127.0.0.1:58730<->127.0.0.1:7055 
    09:49:56.717 DEBUG [20] org.apache.http.impl.conn.DefaultManagedHttpClientConnection - http-outgoing-12: set socket timeout to 10800000 
    09:49:56.717 DEBUG [20] org.apache.http.impl.execchain.MainClientExec - Executing request POST /hub/session/c9f64f66-fc8c-4f3d-a0be-535b63370dd0/execute_async HTTP/1.1 
    09:49:56.717 DEBUG [20] org.apache.http.impl.execchain.MainClientExec - Target auth state: UNCHALLENGED 
    09:49:56.717 DEBUG [20] org.apache.http.impl.execchain.MainClientExec - Proxy auth state: UNCHALLENGED 
    09:49:56.717 DEBUG [20] org.apache.http.headers - http-outgoing-12 >> POST /hub/session/c9f64f66-fc8c-4f3d-a0be-535b63370dd0/execute_async HTTP/1.1 
    09:49:56.717 DEBUG [20] org.apache.http.headers - http-outgoing-12 >> Content-Type: application/json; charset=utf-8 
    09:49:56.718 DEBUG [20] org.apache.http.headers - http-outgoing-12 >> Content-Length: 1172 
    09:49:56.718 DEBUG [20] org.apache.http.headers - http-outgoing-12 >> Host: 127.0.0.1:7055 
    09:49:56.718 DEBUG [20] org.apache.http.headers - http-outgoing-12 >> Connection: Keep-Alive 
    09:49:56.718 DEBUG [20] org.apache.http.headers - http-outgoing-12 >> User-Agent: Apache-HttpClient/4.5.1 (Java/1.8.0_77) 
    09:49:56.718 DEBUG [20] org.apache.http.headers - http-outgoing-12 >> Accept-Encoding: gzip,deflate 
    09:49:56.718 DEBUG [20] org.apache.http.wire - http-outgoing-12 >> "POST /hub/session/c9f64f66-fc8c-4f3d-a0be-535b63370dd0/execute_async HTTP/1.1[\r][\n]" 
    09:49:56.718 DEBUG [20] org.apache.http.wire - http-outgoing-12 >> "Content-Type: application/json; charset=utf-8[\r][\n]" 
    09:49:56.718 DEBUG [20] org.apache.http.wire - http-outgoing-12 >> "Content-Length: 1172[\r][\n]" 
    09:49:56.719 DEBUG [20] org.apache.http.wire - http-outgoing-12 >> "Host: 127.0.0.1:7055[\r][\n]" 
    09:49:56.719 DEBUG [20] org.apache.http.wire - http-outgoing-12 >> "Connection: Keep-Alive[\r][\n]" 
    09:49:56.719 DEBUG [20] org.apache.http.wire - http-outgoing-12 >> "User-Agent: Apache-HttpClient/4.5.1 (Java/1.8.0_77)[\r][\n]" 
    09:49:56.719 DEBUG [20] org.apache.http.wire - http-outgoing-12 >> "Accept-Encoding: gzip,deflate[\r][\n]" 
    09:49:56.719 DEBUG [20] org.apache.http.wire - http-outgoing-12 >> "[\r][\n]" 
    09:49:56.719 DEBUG [20] org.apache.http.wire - http-outgoing-12 >> "{"script":"try { return (function (rootSelector, callback) {\n var el = document.querySelector(rootSelector);\n\n try {\n if (window.getAngularTestability) {\n  window.getAngularTestability(el).whenStable(callback);\n  return;\n }\n if (!window.angular) {\n  throw new Error('window.angular is undefined. This could be either ' +\n   'because this is a non-angular page or because your test involves ' +\n   'client-side navigation, which can interfere with Protractor\\'s ' +\n   'bootstrapping. See http://git.io/v4gXM for details');\n }\n if (angular.getTestability) {\n  angular.getTestability(el).whenStable(callback);\n } else {\n  if (!angular.element(el).injector()) {\n  throw new Error('root element (' + rootSelector + ') has no injector.' +\n   ' this may mean it is not inside ng-app.');\n  }\n  angular.element(el).injector().get('$browser').\n   notifyWhenNoOutstandingRequests(callback);\n }\n } catch (err) {\n callback(err.message);\n }\n}).apply(this, arguments); }\ncatch(e) { throw (e instanceof Error) ? e : new Error(e); }","args":["body.ng-scope"]}" 
    09:50:25.970 DEBUG [13] org.openqa.selenium.remote.server.DriverServlet - Handling: DELETE /session/e92fa9f1-8822-4f27-85a2-9f929d484e4a 
    09:50:25.971 INFO [13] org.openqa.selenium.remote.server.DriverServlet - Executing: [delete session: e92fa9f1-8822-4f27-85a2-9f929d484e4a]) 

Пожалуйста, помогите, я провожу много времени, пытаясь решить ее, может быть, я должен открыть какой-нибудь вопрос? Но я не знаю, как определить некоторые шаги, чтобы воспроизвести его без локального приложения.

Обновлено

Проблема, описанная здесь: https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/4757

кусок бревна от моего водителя FireFox:

"level":"INFO","message":"[fxdriver.SyntheticMouse] Calling fireMouseEvent mousemove 397, 205, ","timestamp":1461003932367,"type":""} {"level":"INFO","message":"[fxdriver.SyntheticMouse] Calling fireMouseEvent mousedown 397, 205, ","timestamp":1461003932388,"type":""} {"level":"INFO","message":"[fxdriver.SyntheticMouse] Calling fireMouseEvent mouseup 397, 205, ","timestamp":1461003932408,"type":""} {"level":"INFO","message":"[fxdriver.SyntheticMouse] Calling fireMouseEvent click 397, 205, ","timestamp":1461003932454,"type":""} {"level":"INFO","message":"[fxdriver.Utils] Not loading document anymore.","timestamp":1461003932478,"type":""} {"level":"INFO","message":"[fxdriver.nsCommandProcessor] Received command: executeAsyncScript","timestamp":1461003932504,"type":""} {"level":"INFO","message":"[fxdriver.nsCommandProcessor] Received command: findElements","timestamp":1461003934754,"type":""} {"level":"INFO","message":"[fxdriver.DelayedCommand] Ignoring pending about:document-onload-blocker request","timestamp":1461003934917,"type":""} {"level":"INFO","message":"[fxdriver.DelayedCommand] Ignoring pending about:document-onload-blocker request","timestamp":1461003935029,"type":""} {"level":"INFO","message":"[fxdriver.DelayedCommand] Ignoring pending about:document-onload-blocker request","timestamp":1461003935156,"type":""} {"level":"INFO","message":"[fxdriver.DelayedCommand] Ignoring pending about:document-onload-blocker request","timestamp":1461003935279,"type":""} {"level":"INFO","message":"[fxdriver.DelayedCommand] Ignoring pending about:document-onload-blocker request","timestamp":1461003935395,"type":""} {"level":"INFO","message":"[fxdriver.DelayedCommand] Ignoring pending about:document-onload-blocker request","timestamp":1461003935518,"type":""} {"level":"INFO","message":"[fxdriver.DelayedCommand] Ignoring pending about:document-onload-blocker request","timestamp":1461003935640,"type":""} {"level":"INFO","message":"[fxdriver.DelayedCommand] Ignoring pending about:document-onload-blocker request","timestamp":1461003935757,"type":""} {"level":"INFO","message":"[fxdriver.DelayedCommand] Ignoring pending about:document-onload-blocker request","timestamp":1461003935889,"type":""} {"level":"INFO","message":"[fxdriver.DelayedCommand] Ignoring pending about:document-onload-blocker request","timestamp":1461003936015,"type":""} {"level":"INFO","message":"[fxdriver.DelayedCommand] Ignoring pending about:document-onload-blocker request","timestamp":1461003936145,"type":""} {"level":"INFO","message":"[fxdriver.DelayedCommand] Ignoring pending about:document-onload-blocker request","timestamp":1461003936273,"type":""}

Но я до сих пор не знаю, как решить это, что is your comet request: To solve the problem I rebuild selenium using following guide: http://shengwangi.blogspot.com/2014/08/how-to-build-selenium-from-source.html This generated my custom version of jar file. Based on comment #28 I updated nsCommandProcessor.js and just added: (request.name.indexOf('<your comet request>') > -1) to hasOnLoadBlocker = hasOnLoadBlocker || (request.name == 'about:document-onload-blocker'); so it would ignore the comet call. nsCommandProcessor.js is under javascript\firefox-driver\js folder

ответ

1

Есть несколько причин, по которым это может произойти. Мое первое предложение - убедиться, что webdriver обновлен. Введите это в консоли:

webdriver-manager update 

Во-вторых, когда вы сказали, увеличивая время ожидания производит такое же поведение, как вы на самом деле увидеть более длительный тайм-аут? Если он приостанавливается на 5 секунд (по умолчанию), то Жасмин считает его асинхронным. http://jasmine.github.io/2.0/introduction.html#section-43

Я бы попробовал (также как хорошую практику), разделив ваши тесты на it блоков.

it('gets the homepage', function() { 
    var homePageAddress = 'http://localhost'; 
    browser.get(homePageAddress) 
    expect(browser.getCurrentUrl()).toContain('localhost'); 
}); 

it('clicks the link', function() { 
    var someLink = element(by.css('.navigationpanel-element[translate="SomeText.SomeText"]')); 
    someLink.click(); 
    expect(something).toBe(true); 
}); 

Этот способ может помочь транспортировщику управлять потоком управления немного лучше.

В-третьих, если они не работают, возможно, попробуйте другой способ определения местоположения элемента. Я не слишком хорошо знаком с атрибутом translate, но он также кажется «экспериментальной технологией» и не поддерживается никаким браузером в соответствии с MDN.

https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/translate

+0

Спасибо за быстрый ответ, я обновляю webdriver-manager раньше, также я пытался использовать последнюю версию selenium-server-standalone, это не помогает. И я вижу более длинный тайм-аут, если я его увеличу. Теперь я понял две вещи: 1. Если «транспортитор» загружает страницу, а затем делает некоторые ожидания, она работает хорошо, даже если я использую атрибут «translate», но мне нужно только добавить ссылку на ссылку или на кнопку, она сразу зависает после щелчок и ничего не делает после нажатия. – Niyarlatotep

+0

Этот случай работы: \t 'он ('получает домашнюю страницу', функция() { \t \t вар homePageAddress = 'HTTP: // локальный'; \t \t browser.get (homePageAddress) \t \t ожидать (браузер . .getCurrentUrl()) toContain ('локальный'); \t}; ' \t этом случае не работает: \t' он ('нажимает на ссылку', функция() { \t \t вар someLink = элемент (by.css (». навигационная gationpanel-элемент [перевести = "SomeText.SomeText"] ')); \t \t некоторыеLink.click(); \t \t ожидать (что-то) .toBe (true); \t} ' – Niyarlatotep

+0

Как я уже сказал, он зависает после нажатия, но нет проблем с click(); в firefox я ничего не понимаю. Я попытался использовать другие локаторы и привести к тому же. – Niyarlatotep

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