2015-05-27 3 views
1

У меня есть код, подобный этому, в тесте транспортира, он переходит на домашнюю страницу, и нам нужно войти в систему, а затем называть эту функцию. Обратите внимание, я бегу это в среде Node.js:Как заставить части транспортира ждать или стать синхронными?

function Login() { 
    browser.findElement(by.id('ID')).then(function (ele) { 
     ele.sendKeys('SomeUserName'); 
     browser.findElement(by.id('password')).then(function (ele) { 
      ele.sendKeys('SomePassword'); 
      browser.findElement(by.partialButtonText('Sign in')).then(function (ele) { 
       ele.click(); 
       browser.getCurrentUrl().then(function (url) { 
        expect(url).toBe("http://NextURLAfterClick"); 
        debugger; 
       }); 
      }); 
     }); 
    }); 
} 

Но я не могу получить щелчок, чтобы стрелять до подтверждения browser.getCurrentUrl(), так что происходит, я получаю URL страницы входа , Я хочу получить URL-адрес после нажатия кнопки для входа в систему.

Я подозреваю, что это мое непонимание того, как работает асинхронный характер этого.

ответ

2

Как сделать части транспортира ожидания или стать синхронными?

Вы можете ждать URL, чтобы изменить с помощью browser.wait():

var urlChanged = function(url) { 
    return function() { 
    return browser.getCurrentUrl().then(function(actualUrl) { 
     return url === actualUrl; 
    }); 
    }; 
}; 

element(by.id('ID')).sendKeys('SomeUserName'); 
element(by.id('password')).sendKeys('SomePassword'); 
element(by.partialButtonText('Sign in')).click(); 

browser.wait(urlChanged("http://NextURLAfterClick")), 5000); 

где urlChanged, в selenium сроки, является "Пользовательские ожидаемый Condition".

+0

Спасибо за хороший совет! –

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