2017-01-04 3 views
4

У нас есть приложение с угловым 1.5, в котором есть экран входа в систему, ничего не было изменено в коде приложения или в наших тестах. мы используем транспортир (с ворчанием-транспортир и т.д ..)
версии:Невозможно получить транспортир, чтобы ждать, когда существующий элемент будет доступен для клика (condition.elementToBeClickable)

"dependencies": { 
    "async": "^0.9.0", 
    "chalk": "^1.1.1", 
    "fs-extra": "^0.24.0", 
    "grunt": "~0.4.5", 
    "grunt-contrib-jshint": "^0.10.0", 
    "grunt-protractor-runner": "^4.0.0", 
    "grunt-protractor-webdriver": "^0.2.5", 
    "jshint-stylish": "^1.0.0", 
    "load-grunt-tasks": "~3.1.0", 
    "lodash": "^2.4.1", 
    "log4js": "^0.6.21", 
    "protractor": "^4.0.11", 
    "selenium-webdriver": "^3.0.1" 
    } 

Все наши тесты в следующем формате:

  • Войти в приложение и спать
  • в тесты (это). каждый из них получает функцию done(), которая вызывается по окончании теста из браузера.sleep ('1000'), а затем (сделано) обещание (синтаксис жасмина).

    describe('login', function() { 
        browser.get('/'); 
        components.login.loginDefault(); 
        console.log('done login'); 
        browser.driver.manage().window().maximize(); // just in case the driver wont reach the '.add-new-type' button 
        browser.sleep(1000); 
    }); 
    
    describe('post login', function() { 
        it('just a test for after user loged in', function (done) { 
         console.log('post login'); 
         const ec = protractor.ExpectedConditions; 
         const getStarted = element(by.css('.add-new-type')); // just a button appears on the next page 
         console.log('getStarted ' + JSON.stringify(getStarted)); 
         browser.wait(ec.elementToBeClickable(getStarted), 5000); 
         console.log('post wait'); 
         browser.sleep(5000).then(done); 
        })}); 
    

Мы не изменили версии зависимостей или ничего в нашей среде, вдруг ничего не работает, то только тесты проходят фазы входа в систему, а затем не для не найдя элемент (я думаю) и застряли до жасмин бросает тайм-аут за исключением

Session created: count=1, browserName=chrome, chromeOptions={args=[--no-sandbox, --test-type=browser, --disable-extensions], prefs={download={default_directory=./e2e/tmp, prompt_for_download=false}}} 
node path changed 
done login 
Started 
post login 
F 

тест Войти пост это просто пример, мы пытались использовать другие способы, чтобы сделать водителю ждать около ждать «ExpectedConditions». Если я буду искать элемент в консоли отладчике (хром) Я достану элемент правильно ... Мы также пытались отладить и в режиме Repl печататься

element(by.css('.add-new-type')).getText() 

и поведение было то же самым - ничего/нет ответа

Будет ли помощь!

ответ

0

Таким образом, после исследования, я обнаружил, что проблематично совершить, мы не изменили любой CSS в нашем приложении, но я реализовал механизм автосохранения с помощью $ таймаут. Я думаю, что наш внутренний тайм-аут как-то вызвал конфликт с тайм-аутом транспортира в ... обратитесь к вопросу here (транспортир в GitHub репо)

Они предложили использовать $ интервала вместо тайма-аут - это на самом деле решается проблема, но я не уверен, если я хочу использовать это обходное решение.

0

Я думаю, это потому, что ваши тесты работают быстрее, чем браузер может загрузить ваш элемент, посмотрите, работает ли это;

describe('post login', function() { 
it('just a test for after user loged in', function (done) { 
    console.log('post login'); 
    const ec = protractor.ExpectedConditions; 
    const getStarted = element(by.css('.add-new-type')); 

    browser.wait(ec.visibilityOf(getStarted), 5000); 

    console.log('getStarted ' + JSON.stringify(getStarted)); 
    browser.wait(ec.elementToBeClickable(getStarted), 5000); 
    console.log('post wait'); 
    browser.sleep(5000).then(done); 
})}); 

Надеюсь, это поможет!

+0

Большое спасибо за ваш ответ, к сожалению, это не сработало, дело в том, что эти тесты прошли отлично до этого, мы также подозреваем, что тесты не ожидают загрузки страницы и в настоящее время не нашли способ чтобы заставить его работать – lironn

+0

шляпа не помогла, но спасибо, я узнал что-то новое – lironn

1

Вы пробовали подождать элементы и URL-адреса?

'use strict'; 

var WaitUtils = function() { 

    this.waitElement = function (element , timeout) { 
     timeout = timeout || browser.params.time.long; 
     var expected = protractor.ExpectedConditions; 
     return browser.wait(expected.visibilityOf(element), timeout, "Element not found"); 
    }; 

    this.waitUrl = function (url, timeout) { 
     timeout = timeout || browser.params.time.long; 
     var expected = protractor.ExpectedConditions; 
     return browser.wait(expected.urlContains(url), timeout, "URL has not contains "+url); 
    }; 
}; 

module.exports = WaitUtils; 
+0

, если по URL-адресу вы имеете в виду маршрут, так что да, но используя browser.sleep (1000); а не browser.params.time.long, спасибо за это, я скоро проверю! – lironn

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