2015-04-08 4 views
1

Я столкнулся со странной проблемой после моего рефакторинга тестов. Я устарел везде до каждого/после каждого блока, чтобы значительно сократить время выполнения, и теперь у меня проблемы с запуском даже простых спецификаций один за другим. Я создал простую конфигурацию и спецификации.Выполнение серийной спецификации транспортира

Config:

exports.config = { 
    seleniumAddress: 'http://localhost:4444/wd/hub', 
    specs: [ 
     'googleSpec.js', 
     'forgotPasswordPageTestSuite.js' 
     ], 
    capabilities: 
    { 
     browserName: 'chrome' 
     //shardTestFiles: true, 
     //maxInstances: 2 
    }, 
    jasmineNodeOpts: { 
     defaultTimeoutInterval: 360000 
    } 
} 

Spec 1:

describe("Google Spec", function() 
{ 

    browser.ignoreSynchronization = true; 
    browser.get('http://google.com'); 

    browser.wait(function() { 
     return element(by.name('q')).isDisplayed(); 
    }, 15000); 

    it('Verify search inout is presented', function() 
    { 
     expect(browser.isElementPresent(element(by.name('q'))).toBe(true); 
    }); 
}); 

Spec 2:

describe("Yandex spec", function() 
{ 
    browser.ignoreSynchronization = true; 
    browser.get('http://www.yandex.ru'); 

    browser.wait(function() { 
      return element(by.id('text')).isDisplayed(); 
     }, 15000); 
    }); 

    it('Verify that search input is presented', function() 
    { 
     expect(browser.isElementPresent(by.id('text'))).toBe(true); 
    }); 
}); 

Если я исполняю их отдельно от использования

shardTestFiles: true, 
maxInstances: 2 

это просто нормально, но когда я выше конфигурации у меня есть такое исключение:

[launcher] Running 1 instances of WebDriver F.

Failures:

1) Google Spec Verify search inout is presented Message: Expected false to be true. Stacktrace: Error: Failed expectation at [object Object]. (/Users/sergeyteplyakov/WebstormProjects/e2eMPP20/googleSpec.js:13:54)

Finished in 6.339 seconds 2 tests, 2 assertions, 1 failure

[launcher] 0 instance(s) of WebDriver still running [launcher] chrome

1 failed 1 test(s) [launcher] overall: 1 failed spec(s) [launcher] Process exited with error code 1

Process finished with exit code 1

В моих реальных тестах у меня такая же проблема, когда мой спецификации похож на то, что я предоставил. Когда я смотрю, что действительно происходит по какой-то причине, метод .get (url) из 2-го spec начал выполняться до того, как 1-я спецификация закончила. Я предполагаю, что я что-то отсутствует ядро ​​и значительное, может кто-нибудь мне точку пожалуйста)

ответ

3

Я думаю, что с этой установкой нет никакой гарантии, что protractor будет выполнять эту wait() вызов и ждать результатов перед выполнением it().

Если вы хотите какой-то код выполняется, прежде всего из it блоков в спецификации, используйте beforeAll() (встроенный в жасмин 2, доступный как third-party для Жасмин 1.x):

describe("Google Spec", function() 
{ 
    beforeAll(function() { 
     browser.ignoreSynchronization = true; 
     browser.get('http://google.com'); 

     browser.wait(function() { 
      return element(by.name('q')).isDisplayed(); 
     }, 15000); 
    }); 

    it('Verify search inout is presented', function() 
    { 
     expect(browser.isElementPresent(element(by.name('q'))).toBe(true); 
    }); 
}); 

Также обратите внимание, что вы можете использовать Expected Conditions упростить этот wait() блок:

var EC = protractor.ExpectedConditions; 
var elm = element(by.name('q')); 

browser.wait(EC.visibilityOf(elm), 15000); 
+0

Я попытался включить beforeAll блоки, но они не помогли. Также, когда в моем реальном тесте я просто поставил во втором пакете весь код до того, как его 1-й блок запустил до того, как он начнет работать, это действительно странно –

+0

@SergeyTeplyakov спасибо, что если вы переместите 'browser.ignoreSynchronization = true;' на ' OnPrepare() '? – alecxe

+0

Я был неправ, 1-й подход работал хорошо, спасибо вам большое) –

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