So Protractor: do I need it? Well, since it has been announced as the official end-to-end testing framework for AngularJS, I probably need it. But do I need it for Polymer and will it prove useful for Patterns in Polymer?
I think today I will explore that by using Protractor to test last night's Angular + Polymer + SVG application:
I start by installing Protractor with npm:
$ npm install -g protractor ... /home/chris/local/node-v0.10.20/bin/protractor -> /home/chris/local/node-v0.10.20/lib/node_modules/protractor/bin/protractor /home/chris/local/node-v0.10.20/bin/webdriver-manager -> /home/chris/local/node-v0.10.20/lib/node_modules/protractor/bin/webdriver-manager protractor@0.17.0 /home/chris/local/node-v0.10.20/lib/node_modules/protractor ├── saucelabs@0.1.1 ├── minijasminenode@0.2.7 ├── adm-zip@0.4.3 ├── optimist@0.6.0 (wordwrap@0.0.2, minimist@0.0.5) ├── glob@3.2.8 (inherits@2.0.1, minimatch@0.2.14) └── selenium-webdriver@2.39.0Protractor does not seem to come with slick setup and configuration initializers just yet, but it does have example config that I can copy from the installation directory:
$ mkdir protractor $ cp /home/chris/local/node-v0.10.20/lib/node_modules/protractor/example/* protractor/I am going to test with the Chrome driver tonight, so I download:
$ wget http://chromedriver.storage.googleapis.com/2.8/chromedriver_linux64.zipAnd install it:
$ unzip chromedriver_linux64.zip $ mv chromedriver protractor/With that, I can run the example Protractor test:
$ protractor protractor/chromeOnlyConf.js Using ChromeDriver directly... ... Finished in 10.63 seconds 3 tests, 5 assertions, 0 failuresTo test my own application, I start a
protractor/conf.js
for my current angular application:exports.config = { chromeOnly: true, chromeDriver: 'chromedriver', capabilities: { 'browserName': 'chrome' }, specs: ['pizza_spec.js'], jasmineNodeOpts: { showColors: true, defaultTimeoutInterval: 30000 } };But that is about as far as I get. I try what I think is a simple test to click on the
<a>
tag to get to the next page in my app where I can verify that that <x-pizza>
tag is present:describe('pizza store', function() { beforeEach(function() { browser.get('http://localhost:8000'); }); describe('pizza builder', function() { beforeEach(function() { var finder = by.id('mk-custom'); var el = element(finder); el.click(); }); it('should have an <x-pizza> Polymer', function() { var el = by.css('x-pizza'); expect(browser.isElementPresent(el)).toBe(true); }); }); });Bu no matter what I try, I get stale element errors:
protractor protractor/conf.js Using ChromeDriver directly... F Failures: 1) pizza store pizza builder should have an <x-pizza> Polymer Message: StaleElementReferenceError: stale element reference: element is not attached to the page document (Session info: chrome=34.0.1797.2) (Driver info: chromedriver=2.8.240825,platform=Linux 3.5.0-18-generic x86_64) Stacktrace: StaleElementReferenceError: stale element reference: element is not attached to the page document (Session info: chrome=34.0.1797.2) (Driver info: chromedriver=2.8.240825,platform=Linux 3.5.0-18-generic x86_64) ==== async task ==== WebElement.click() at element.(anonymous function) [as click] (/home/chris/local/node-v0.10.20/lib/node_modules/protractor/lib/protractor.js:440:32) at /home/chris/local/node-v0.10.20/lib/node_modules/protractor/lib/protractor.js:89:34I suspect this has something to do with my use of partials—especially on the start page, but I'll be darned if I can figure out how to convince Protractor that there really is a clickable link tag.
Bother. I may try this again tomorrow, but I cannot afford too much time. There are many more Polymer things to research before I am done.
Day #1,006
No comments:
Post a Comment