I'm a front-end developer coding CSS, HTML and Javascript (in that order) and most of the work I do is design-lead. Whilst the quality of the designs I create with CSS is subjective, much of the coding is purely functional / layout and I am interested in any way to automate the testing of my page.
My question can be split into two parts
Does anyone have any existing techniques or suggestions for automatically testing CSS or HTML, particularly with regard cross-browser compatibility?
As CSS can be roughly divided into properties that control layout and those that control design, is automated testing only viable for layout (it can't be possible to automatically and valuably test that a colour is correct, for example)? If so, what sort of CSS values might be suitable for boolean acceptance tests?
Here are my initial examples of boolean layout values that could be tested - there must be others?
- Does a pop-up appear above other content (z-index)
- Does a footer clear all other content (float)
Thanks for your help. Part three of the question is of course "Am I wasting my time going down this route?".
***** edit *****
I have found this article that asks the same questions I've asked, but more in depth and perhaps a little more eloquently.
http://www.morethanseven.net/2008/10/13/unit-testing-css-looking-solution/
Moving forward I am trying to isolate some examples from my work where CSS alone has caused functional errors however those that I've found so far are bugs with JS and CSS combined. I would still like to automatically test these sorts of errors, but appreciate that with javascript used it is beyond the scope of my original question.
***** edit 2 *****
I've since blogged about how I set about solving this problem, available here:
w3 validation and Adobe Browser Labs are the best solution I can provide to this problem. Back when I was doing UI layout and design (read=cutup monkey) those were my two best friends.
There's really no way to automate testing how something looks. So, you're back to either visually inspecting everything yourself or crowdsourcing (or insourcing) a tester to do the same thing for you. It ain't fun, but it keeps us Front-end guys in business.
The good news is, many browsers share rendering engines. So, if you test correctly on Chrome, you can bet you're going to be fine in Safari. Check in Firefox and IE and you've got 90% of your problems solved. Then, determine how picky you (or your boss) wants to be and test accordingly.
If you're looking for a tool that's built for regression testing check out:
https://github.com/bfirsh/needle
It basically takes screenshots of the parts you select (check their example) and compares them. If they're too different from each other, the test will fail. It's using Selenium, so you might as well check for other assertions, like z-indizes, font-sizes, etc.
You can also check Nighwatch.js
Have a look into Selenium - it's a browser-based automated testing tool. I think it's what you're looking for.
It works with all browsers (it has an IDE in Firefox for creating your test scripts, but the scripts themselves can be run in any browser)
It allows you to test the contents of the DOM, etc against the expected output at any point during the script.
These tools may not have existed when the OP posted but they are worth a mention:
CasperJS, which uses PhantomJS https://ghostinspector.com/ (for automating journeys) https://github.com/BBC-News/wraith (for screenshot comparisons)