Android and iOS Support
TL;DR: We’re retiring Selenium’s own AndroidDriver and iPhoneDriver in favour of any of Selendroid, iosdriver and Appium. If you’re using one of Selenium’s own mobile drivers, please evaluate one of these alternatives.
The longer version:
In 2007, Steve Jobs announced the iPhone and changed the mobile Web from a curiosity to something the mainstream wanted and used. Current trends suggest that mobile Web usage will surpass desktop usage in the not too distant future. Which is a long way of saying the mobile Web is going to be a big part of the future of your sites and that it’d be an extremely wise idea to test them on mobile devices.
The Selenium project responded to the rise of the mobile web by working to produce WebDriver implementations for both iOS and Android. The first lines of the iPhoneDriver (which also worked on the iPad) were added to the project early in 2009. The AndroidDriver was added in June 2010, and was primarily developed by engineers at Google. To this day you can download the official Android SDK and find “Google WebDriver” as one of the optional extras you can download.
After the initial work on the mobile drivers, something interesting happened. Experimental extensions and modifications to the drivers were made outside of the selenium project. The first one of these that I was involved with was “nativedriver“. This took the novel approach of allowing users to interact with the native UI of the phone, be it Android or iOS, using the familiar WebDriver APIs. The first time I saw it, I thought it was madness, but the engineers working on it soon convinced me that it made sense. And guess what? They were right.
Sadly, after proving the idea was viable and workable, the NativeDriver project ran out of steam, but it set the scene for three projects that have taken the idea and run with it to create remarkably capable pieces of mobile testing software: Selendroid, iosdriver and Appium. All three of these allow a tester familiar with the WebDriver APIs to test mobile apps on iOS and Android. Not only native ones, but also hybrid or pure web-based ones too. They’ve recently been joined by the Windows Phone WebDriver, which allows testing of mobile web apps on WinPhone 8.
All of these projects have something in common: they’re far more active, more capable and have pushed further than the equivalent code in the main selenium project. In fact, some of the members of the selenium team that contributed to both AndroidDriver and iPhoneDriver are now also working on those other projects. There’s work being done to maintain interoperability between the different drivers, allowing users to chose which framework is most appropriate for their needs without fear of their tests needing major rework.
This means that keeping the existing Android and iPhone drivers within the Selenium project isn’t helping our users. The alternatives are better, and keeping “official” drivers within the project muddies the water. Worse, the selenium developers are slow at making fixes to those drivers, which is incredibly frustrating for everyone involved. Because of this, the Selenium project has deleted the code for those drivers from its repository and we recommend you evaluate and use one of the alternatives.
Of course, the code will still live in our repo’s history, so if you’d like to build them yourself, then it’s still possible. The last version with the iPhoneDriver is ef9d578, and the last one with the Android source is 00a3c7d. We’ve uploaded a version of the AndroidDriver built from that revision to the downloads page to save you having to do so yourself.
These changes do not mean that we don’t support mobile as a project. It just means that we support the best implementations of mobile WebDriver, and those aren’t written as part of the Selenium project.
Selenium Hangout 3 Recap
Here is a recap of our most recent Selenium Hangout where we answered a grab bag of questions ranging from how to use Selenium within your existing workflow down to nitty-gritty details around performance and deprecated functions.
Be sure to tune into our Twitter feed to find out details about our next Hangout.
And if your question didn’t get answered, we encourage you to hop on IRC and ask it there. Not sure what that means or how to do it? Then read this.
David Burns (@AutomatedTester)
Dave Haeffner (@TourDeDave)
Jim Evans (@jimevansmusic)
Kevin Menard (@nirvdrum)
00:00 – 05:50
Preamble and Introductions
05:51 – 18:09
Question 1 – For a team getting started with Selenium what are some typical workflows for how product code is built, and Selenium tests built, as well as for when product code is modified and Selenium test modified?
18:10 – 34:15
Question 2 – Recommendations for testing responsive design?
34:15 – 37:44
Question 3 – Was VerifyText removed?
37:45 – 46:20
Question 4 – Why is IE9 slow and hard to use and recommendations for alleviate this?
46:21 – 50:11
Question 5 – ChromeDriver2 seems less robust than it’s predecessor, thoughts on this?
50:12 – 53:39
Question 6 – The Selenium documentation is out of date, how can I contribute a fix for this?
53:40 – 54:31
How to help out with the Selenium Conference?
Selenium Hangout 2 Recap
Thanks to all who attended and tuned into the last Selenium Hangout where we talked about Selenium 3! Below is a write-up of the meetup, the video, and relevant links we mentioned. And to access all meetup videos you can go here.
00:00 – 05:04
Goal and items for today’s conversation
Feedback review from last meetup
05:05 – 07:34
Gradual approach to phasing out Selenium RC
Support for Selenium IDE HTML Suite running
07:35 – 09:55
Selenium Builder, how it will replace Selenium IDE, and when
09:56 – 11:30
Firefox Driver 2 release (a.k.a. “M day”)
11:31 – 12:00
Tasks required to complete WebDriver W3C standard
12:01 – 14:30
Upgrade concerns for enterprise users of Selenium
Recommended watching: Jason Leyba’s talk at SeConf about upgrading Selenium at Google
Reasons why companies should make the jump
14:31 – 14:55
Why we need browser vendors to help
Why the W3C standard makes sense
14:56 – 21:40
Lessons learned and challenges found when a large scale practitioner upgraded from RC to WebDriver
Things they would like to see cleaned in Selenium 3
A nod in support of Selenium RC as a separate download
Simon attempts a joke
21:41 – 25:15
Other changes in Selenium 3
– all or nothing upgrade
– exception handling (changing from status codes to status strings)
– how commands are getting sent across the wire
– philosophy behind approach to Selenium RC approach
25:16 – 27:29
Mobile support in Selenium 3
27:30 – 37:05
Firefox Driver and Firefox OS
Recommended watching: Jonathan Griffin & David Burns’ talk at SeConf on Firefox Driver/Marionette
Creating a common set of Desired Capabilities
Recommended watching: David Burns’ talk at SeConf on adding mobile gestures to WebDriver
37:06 – 38:20
38:21 – 49:40
Brief history of Selenium project
Recommendation for RC users to look at the stable and brilliant new and shiny
Plan for Selenium RC in depth and rough timeline
Another recommendation to watch Jason Leyba’s talk at SeConf about upgrading Selenium at Google
49:41 – 50:45
Encouragement for folks to hop on Selenium IRC chat channel (especially if your question wasn’t asked/answered)
Recommended reading: Elemental Selenium’s write-up on what IRC is, how to use it, and how to connect to the Selenium IRC chat channel
50:46 – 51:45
Although the WebDriver APIs started life as just a mechanism for automating web browsers, over the past few years it has been extended to also work on mobile devices. Projects such as Appium, iosdriver, and Selendroid have all shown that this approach works, and works well. On the Web, if you start using Selenium WebDriver with one browser (Firefox, for example), it’s easy to switch out the browser for another one (such as Internet Explorer or Chrome). It’d be nice to have a similar option for mobile, switching from one automation framework for Android to another.
As part of the Selenium 3 work, we have started working on a test suite to help ensure this level of interop between appium and iosdriver, and appium and selendroid. To kick start the process, the primary authors of each of those tools, as well as others including David Burns representing the Marionette project (Mozilla’s implementation of WebDriver for Firefox and Firefox OS) and Simon Stewart, the lead of the Selenium project, have spent the past two days locked in a small room in Mozilla HQ, London. They’ve taken this time to work out the areas where each of their projects didn’t align and agreed on a way to ensure a level of interoperability. There was only a minimal quantity of blood and tears, but plenty of hard work.
As we speak, work has started on a shared test suite, hosted in a repo in the selenium project’s Google Code page. Please, feel free to come along and join in!
The Road to Selenium 3
While all this has been happening, the world has moved on, and now it’s time for the Selenium project to look to the future. It’s with great pleasure that I can now say that we’re working towards Selenium 3.
We aim for Selenium 3 to be “a tool for user-focused automation of mobile and web apps”.
What does this mean? For mobile users, the Selenium project will be hosting a suite of tests to facilitate interoperability between the many different projects available that are extending the WebDriver API to also cope with mobile. Developers from projects such as Appium, ios-driver and selendroid will be working on the suite of tests to enable this.
We’ll also be working on making the technology behind Selenium as stable and capable as possible. For this reason, Selenium 3 will see the removal of the original Selenium Core implementations, and consequently we’ll be deprecating the RC APIs too. The old versions will still be available as a separate download, but active development will cease, except for very urgent fixes. We will still be providing an implementation of the RC APIs backed by WebDriver, so you can continue running your existing tests, but now would be a great time to make the move to using the WebDriver APIs directly.
For those of you exporting your tests from IDE and running the HTML suites, we’ll provide an alternative runner that allows you to continue running those tests too, though it’ll be backed by the same “WebDriver-backed” RC implementation as offered by the main download. Again, the original implementation will be available as a download, but it will no longer be actively developed once we release 3.0.
Our current plan is to start shipping 3.0 by Christmas this year: it’s going to be a lot of fun!
A Smattering of Selenium #157
Trying to find every excuse not to cut the grass … including apparently closing some browser tabs.
- Interoperability – Standardized Test Information Interchange has me so full of ‘meh’ as to be hilarious. Commercially driven standards rarely are and/or I am just too much of an open source person to accept this model for standards development
- Licensing in a Post Copyright World – important
- How to Make Async Requests in PHP is php specific in its solution, but has some interesting bits about socket establishment that applies to other ones as well
- Adding Comments to JSON feels like a hack. Buts a clever hack.
- Maven Release Plugin: The Final Nail in the Coffin takes great joy in removing part of the maven environment from their workflow. And really, who doesn’t?
- Open Sourcing a Python Project the Right Way is nice … though of course, as with everything else these days, it has some Github specific isms. You can do it the right way with hg and bitbucket of course… and that is disclaimed in the article
- Headless Watir using both HTTPUnit and PhantomJS
- Implementing HTTP Status Codes in WebDriver, Part 2: Achievement Unlocked – umm, part 2?
- PhantomJS + Plugins + AWS + BrowserMob Proxy – proxy all the things! Including headless things.
- Mastering the Craft is a good reminder, but also, eBay has its own customized version of eclipse? Guessing this is one of those ‘at scale’ solutions
A Smattering of Selenium #156
Brain fried from PyCon Canada 2013 and ‘some’ browser tab is misbehaving which means its time to start closing some of these.
- Patchwork seems like an awesome idea, but at the same time, I’ve had to work in heavily monkey-patched RoR apps before…
- Evolving syntax is PHP specific in its examples, but the ideas transfer
- Roslyn + Selenium: Scripty C# Powering Browser Automation – some C# voodoo?
- It’s like 10000 knives when all you need is a Spoon – or specifically, this particular spoon which is yet-another-android-automation-tool. See comments for a bit of discussion re Appium which seems to be the currently best marketed solution in this space
- Planet generator has absolutely nothing to do with automation, but is just cool
- TestSpicer could be cool if it is massively flushed out
- Compatibility changes in IE11 Preview is going to break things I fear, for instance the readyState stuff?
- PyCon Canada 2013 decks are now up
- Implementing WebDriver HTTP Status Codes, Part 1: Challenge Accepted – is interesting in that it uses Fiddler
- Links are not buttons. Neither are DIVs and SPANs – this, a million times.
The World’s Best Selenium Meetup
Selenium Meetups are great, but…
Have you ever wanted to attend a Selenium Meetup but there’s not one near you? Or maybe there is but something’s come up and you can’t make it out that night? Or maybe the meetup near you struggles to get good speakers and have a consistent schedule? [Note from Adam; like, say, the Toronto one…]
We can do better
Well, what if there were a way to attend a meetup regardless of location?
And what if each meetup you attended was lined with core maintainers of the Selenium project?
And if you missed it, what if the whole thing was recorded and available for you to review at your leisure?
Well, now you can.
The World’s Best Selenium Meetup
Introducing Selenium Hangout — the world’s best and most accessible Selenium meetup. An entirely online meetup that leverages Google Hangouts and live streaming to YouTube. All meetups will be recorded and posted online afterwards.
Each meetup will contain a small panel of people from the Selenium Community (e.g. core committers, automation practitioners, etc.) and they will discuss various topics (TBD).
How to attend
Simply follow the SeleniumHangout Twitter account to find out more.
A Smattering of Selenium #155
A ‘should be scripting, but brain stuck in neutral so closing some tabs’ edition of the Smattering.
- The slippery slope isn’t automation related, but if your employer does these things I’d suggest logging a bug and then finding an ethical job
- Why Package Signing is not the Holy Grail – crypto / security is hard. Also, I have a signed package for you to install…
- PHP and Async requests with file based sessions could be a way to speed up a PHP site. Which in turn reduces the amount of time your scripts take to run
- Canadipsum, eh? just because. (eh)
- Using CodedUI testautomation without UIMap files brings Page Objects to CodedUI
- Continuous Delivery Workshop With Neal Ford (@Neal4D) – a Retrospective – yup, the hard part is not the technical bit, but the people parts
- librarian-puppet says You can all stop using git submodules now which is good enough for me
- Highlighting the element before any clicks: A foray into the AbstractEventListener — the event listener stuff is something I need to sort out.
- phpci is built specifically for php apps, and doesn’t pretend to have the features something like jenkins does
- Beware subclassing Ruby core classes – there are likely parallels in other languages as well.
A Smattering of Selenium #153
A Sunday Smattering? Sure!
- Solution to the Selenium with Firefox 22 Issues and How to Report Issues – Open Source is hard. Supporting Open Source’s infrastructure is harder — by a large margin
- frequests – asyncronous HTTP Requests; not sure where I would use this, but…
- why I don’t touch crypo – again, don’t. touch. crypto
- Five reasons why you should quote attribute values in HTML5 – for the record, you should do this in HTML 4 as well.
- All the ‘Write The Docs session videos — a conference I couldn’t afford to attend, and likely don’t have the time to watch the videos now
- Automated Testing of HTML5 Canvas Applications with Selenium WebDriver – more and more important…
- Solving window.onbeforeunload nasty prompts
- pytest-poo for when your tests are, erm, crappy
- Tada! Here is SlimerJS! – like PhantomJS but for Gecko. I think.
- Did I select the right element? is a neat trick for highlighting things — even if the escaping of the code didn’t seem to survive formatting
A Smattering of Selenium #154
Apparently today’s ‘wait for an email’ task is to whittle down the smattering queue some more.
- I won’t even pretend that FOAAS has to do with automation, but makes me laugh. Also, depending on how crappy your place of work is, it might not be SFW
- PHP RFC: Importing namespaced functions is interesting if you are writing your scripts in a Functional manner. In PHP. In a future where it gets accepted and implemented.
- Measuring Web Page Load Times using JMeter — and read the response articles too for clarification / elaboration
- I kinda like that Se suites are making their way into large projects such as Moodle’s functional-test-suite repo. But at the same time it worries me when it hasn’t had a commit in 10 months. Suites should likely change even more than the app code it exercises
- jasmine tactics screencast — on the long list of tools I should learn
- Introducing the Mogotest Jenkins Plugin – hurray for more pipeline integration points
- The DOM isn’t slow, you are. — set the phasers on snark, and then read it anyways.
- Cross-Browser, Event-based, Element Resize Detection – edges are sharp.
- There is No ROI in Social Media Marketing – read this, and now read it again swapping in Functional Automation everywhere
- Now Available: Pocket Guide to Colour Accessibility could, in theory, be translated into a set of ‘rules’ to validate pages against since we can the colour of elements and their computed css values.
A Smattering of Selenium #152
40-ish minutes until midnight eastern so that counts as two days in a row, right? Right?
- Improving jenkins execution times by common sense — common sense. sadly lacking most days.
- How to make test automation more effective? is useful up until the pitch at the end. So read until you get to that.
- Data Structures for PHP Devs: Trees – non-trivial data structures are non-trivial
- Writing clean WebDriver test suites for “duplicate” functionality by parameterizing on page objects – I especially like the usage of ‘might’ at the top
- dalek-internal-webdriver – what’s a day without a JS webdriver implementation?
- Antialiasing 101 – I kinda think that automators should just spend a day reading this site rather than reddit
- RSpec 2.14 is released!
- HTTP/2 Status Update – Ugh.
- PHP 5.5: Generators – You know, with yesterday’s phpenv I’m almost tempted to make some of my stuff PHP 5.5…
- Program Like a Machinist – hurray for understanding the motorcycle example!
A Smattering of Selenium #151
Almost a month after the last one. Though it did nice to have it at 150 when people go to the blog … but a greater number is nicer.
- So I was trying to find Requests for PHP whilst talking to the grumpy programmer and he pointed me out to Guzzle which looks equally cool
- Can you optimize list(genexp) is one of those geeky language internals things that could be handy to have in your back pocket
- Slightly Snarky GWT Debug ID FAQ – c’mon, when have you seen a more blatantly ‘put this in the smattering’ title than this?
- phpenv could be useful. And could be I mean ‘holy crap this is useful’ — but then again, I do actually need 3 different versions of PHP locally. YMMV
- Pain killing the pingponger’s decease is by their own admission not stable, but is a nice temporary solution. And illustrates why you should learn your tools — if they didn’t know about custom annotations and their runners in JUnit they would have missed this.
- Yet another JS testing framework has grown a webdriver tentacle – karma-webdriver-launcher
- I barely understand a word of Method Combinators in CoffeeScript which is often a sign I should include something
- Statically Recompiling NES Games into Native Executables with LLVM and Go – $entity help us if we ever need to do this level of ridiculousness to drive browsers, but holy wow its cool.
- Remember I said I should just auto-include all of Raymond Hettinger’s SO answers? Well, here’s another one – Python importing class attributes into method local namespace
A Smattering of Selenium #150
Yup, this smattering has very little to do with Selenium, but… 150!
- Referencing DOM from JS: there must be a DRYer, safer way is a nice ‘here is where I started, and here is how I ended up where I am’ post which can be stolen into other languages / frameworks other than in Backbone
- Hash lookup in Ruby, why is it so fast? is not something I was wondering, but now I know why.
- Nobody understands the GIL – in any language.
- Resource Locator Discussion – namespace all the things!
- How to Survive the Coming Test Automation Zombie Apocalypse is abso-freaking-lutely awesome
- Blackhole proxy to block all external calls is a snippet that came out of SeConf this week
- Filter a list into two parts. Ouch. My brain just broke. (But generators do that to me.)
- What you need to know about dates and times in computing could be useful. If one kindles.
- SSL Helpers is a couple python scripts for manipulating certificates
- storyautomation seems to have a number of decent posts. Of course, they are around RC so I was hesitant to link to it, but it looks like the ideas could transpose up to WebDriver
A Smattering of Selenium #149
Too. Many. Tabs.
A Smattering of Selenium #148
Gotta start this up again…
Curious to know how we picked speakers for the 2013 SeConf? Read on…
This is a guest post by Marcus Merrell, one of the organizers of the 2013 Selenium Conference.
Selenium/Webdriver has kept my family fed since 2007. Since I’ve never committed a line of code to this magical project, I thought the least I could do was spend a few hours helping put SeConf 2013 together. When they asked for a volunteer to put the speaker program together, I was thrilled to step forward!
Ultimately, I decided on a more conventional approach than straight-up dictatorship–and I can only credit the 5 awesome people on the committee and their ruthless adherence to the principle that “data wins”. I wanted a mix of hard-core browser techs, language-binding mavens, and people who ultimately made their living keeping a large variety of clients happy. And Simon–always Simon. I left myself out of the voting, because these are the experts’ experts: I figured the best thing I could do was ensure a smooth process and remove the burdens of book-keeping.
Here they are, the People You Can Blame:
– Dave Hunt, Mozilla
– Jim Evans, Salesforce.com
– Santiago Suarez-Ordoñez, Sauce Labs
– Jari Bakken, The Matrix
– Simon Stewart, Mt Olympus
I don’t know if it was beginner’s luck, but there was zero drama. These folks are all pros, and we’ve put together a hell of a great conference for Boston.
We had 24 slots to fill, but only ~45 submissions, and without the variety of topics we wanted. Specifically, we were dismayed by the low number of submissions from female presenters. Given a high proportion of female testers in the industry, we believed their voice was under-represented. The call was extended in part to attempt to correct this, and ended up netting us ~20 more submissions in total.
With the proposals all gathered in one place (thanks, Ashley!), I then set about trying to find “themes” in the submissions. Several leapt out immediately–lots of case studies showed up from large household-name companies that I knew people would find interesting. Some deep-dives appeared, describing the inner workings of browser implementations or talking about a new tool-set people might find interesting.
Another theme I saw, a blend of the previous two, were the Best Practices–people who wanted to talk about processes for applying disparate tool sets to the problems we face every day. I believe these talks have the broadest appeal, and are a primary driver of attendance. We also had enough mobile offerings to put together a “bloc”, which will consume a whole afternoon.
Simon suggested “blind auditions” for the selection process, and everyone loved the idea. Voting would take place not knowing anything about the speaker outside of hints left in their abstract. Since we had extended the call to invite submissions from female presenters, we therefore believed this would “correct” for that bias. It should at least remove all doubt that any speaker was chosen specifically for their gender.
I created a Google spreadsheet with a separate tab for each of these themes. Each tab contained only a few columns–the title, abstract, “notes to organizers” (if it was relevant), and one column for each person on the committee to vote. I did not include author bios, and if someone’s name showed up in anywhere else, I redacted it. I did, however, leave in speaker’s company. I figured if I saw two talks, “Success and Failure at Google” and, “Continuous Integration with Selenium at Bob’s House of HTML and Gumbo”, it would be completely reasonable to make the decision based on the company.
My thinking was, rather than have each person go through each talk individually, all these folks would have to do is read a paragraph and assign a number 1-5 (1=want, 5=don’t want). That way they would rank the talks in terms of the best subjects for that particular theme, thereby making sure just about anyone would have a good “path” through the conference. The committee was given a short deadline (1 week!) to fill out the voting columns, after which we’d sync up on the phone.
Somehow we managed to get people from California, Texas, Florida, the UK, and Norway into the same Google Hangout at the same time. We averaged the scores into a column in the spreadsheet, and Simon expertly sorted, manipulated, and color-coded the rows. As I said, we had 24 slots to fill, so Simon just drew a line: every talk in every theme that scored below a 2 was “in”. This left us with around 10 talks–we all agreed on two points: a) those talks were awesome, and b) we needed more.
Where does this leave us? With 2 days of Track A and one day of Track B. Given 8 presentations per track per day, that leaves us with an entire day of “open” talks for Track B. Be sure to sign up right when you get there–these slots went really fast last year, and will probably go fast again. We also will have a day of workshops on four different topics, with two in the morning and two in the afternoon.
We’d like people’s feedback on how the conference “flows” this year. As I said, we wanted someone with just about any background and interest to be able to find a path through this conference, so I’d like to hear whether or not we achieved it.
…and I hope to see you all in Boston! (PS: Tickets are going fast!).
A Smattering of Selenium #147
My. Get. Productive. I know! I’ll push out a smattering. Oh. …
- Python for Ruby Programmers is a pretty good deck, with the requisite snark at the end that you can safely ignore.
- Me @ Selenium Camp 2013 is Ivan’s mini-experience-report from SeCamp and has his slides on GhostDriver
- Using pip in production? pip install : Lightspeed and Bulletproof is a useful trick which I know I’ve done variants of with java and ruby in the past
- SeConf speakers are up — and the list looks really good
- Interfaces or Abstract Classes? is marketing fodder, but its the best kind of fodder since its actually useful. For those of us still working through PHP.
- I forgot about this semantic war in the whole three weeks since it happened…
- Android UI Design Pattern in practice is not only useful, but I like the format…
- Continuous Deployment: The Dirty Details – slide 18, 36, 42, 83, 102 are the killer slides. 102 is the killer-est slide and is where I would enter a semantic debate with the fine folks at Etsy over whether they are doing Continuous Deployment or Continuous Delivery
- Could CSS3 be making sites that are not testable? – New standards making the life of automators more incredibly hard? Never!
- Python – verify a PNG file and get image dimensions
A Smattering of Selenium #146
Happy ‘productivity destructive week’ — otherwise known as March break.
- How to Accept Self-Signed SSL Certificates in Selenium 2 — or you could use ‘real’ certificates that are trusted by the browser by default. If you are using self-signed certificates to ‘save money’ and you spend 3 hours making it work, you are not saving money anymore
- JockeyJS seems like it could be useful
- Dear every-js-widget-library-author, You can’t create a button
- If you are using PHP, then The Grumpy Programmer’s PHPUnit Cookbook should be added to your reading pile. Thankfully he doesn’t touch on the built-in WebDriver stuff but the ToC still looks relevant to what we do
- WordPress Performance Optimization is just cool — and could provide tricks for your non-WordPress apps too
- Single-Session Development is something I don’t do — but can appreciate the geek-ness of this
- JUnit’s evolving structure shows what the, erm, evolving structure of JUnit and has the killer line of ‘Programmers should be forced to wear their systems’ package-structures on their tee-shirts.’
- Basic Authentication With the BrowserMob Proxy, wow, that’s an annoying edge-case
- Breaking Down Amazon’s Mega Dropdown – ugh, because mouse events weren’t hard enough without menus tracking and rendering based on its position
- If you are intro RSpec, then RSpec Next Steps is going to be for you. Even if it does use a horrid html-based deck format (use the left/right arrow keys to navigate)
A Smattering of Selenium #145
Alice Finch builds massive LEGO Hogwarts from 400,000 bricks starts out at awesome and goes somewhere further down the scale when you get to the photo that shows scale.
- Models of Automation — really, who reading this hasn’t had the conversation described in there in one of its variants
- Stop Moving So I Can Click You Dammit! – illustrates the only acceptable place for Thread.sleep()
- Using Realistic Data in Unit Testing and AngelaSmith: Creating Test Data is a two-for for the C# crowd — though the ideas resonate with everyone else
- How to handle common components with Page Object Model? — I tend to use Inheritance, though am experimenting with Composition. The right solution is likely ‘both’
- Dear Nic, Should we log directly? illustrates the good and bad of unix pipes
- How foreach actually works was found via a snarky tweet, but is great
- Introducing the HTML5 Hard Disk Filler&tm; API is hilarious. And the next salvo in the WebKit vs mono-culture battle
- HTML’s New Template Tag – Standardizing Client-Side Templating — look! More HTML5 madness! And no automation suggestions / gotchas. But HTML5 Rocks is a great site anyways
- Why your web app should be responsive — I’m coming to dislike the term ‘responsive’, though agree with the sentiment. Now, how does your WebDriver [or Watir] scripts change in order to handle this?
- Nyan Cat RSpec Formatter is outstandlingly silly. And should be applied to all your RSpec runners. Immediately.
A Smattering of Selenium #144
Real Canadians watch curling instead of hockey.
- jsPerf is a performance oriented sandbox
- The Myth Of Convention Over Configuration – hint: its curation over configuration. And since this is how frameworks work…
- sublimetext_indentxml is a sublime text plugin to indent xml — yes, originality counts with plugin naming
- Introducing Boxen – Boxen feels a lot like Vagrant, but for Macs? Maybe?
- Checking for Technical Requirements in a Sign-up Process — woah, this would be a pain to automate
- office_docs looks like it might help parse and inspect ms office docs your app generates. Or not. Dunno.
- The Future of Perl (5) proves that the Se gang isn’t the only one to completely botch naming and versioning. 😀
- Tortoises, Teleporting Turtles, and Iterators is pretty geek
- Don’t Use Automatic Image Sliders or Carousels, Ignore the Fad – and Reason #4 is they are a pain in the ass to automate since the state is always in flux
- The Continuous Delivery Maturity Model has some interesting ideas, but that it is presented as a ‘maturity model’ is fail all the way down.
A Smattering of Selenium #143
If you had anything interesting last week I should have seen, you’ll have to resend it to me or @seleniumhq — things were a bit crashy.
- So … Opera switching to WebKit. That doesn’t mean you can write off automation with Opera though. Tragedy of the WebKit Commons
- Introducing ChemistryKit — a Ruby version of Saunter is another self-serving link.
- Automated local accessibility testing using WAVE and WebDriver is a post I had been waiting awhile for
- How Did the Duck Hunt Gun Work? because, you know you wanted to know. Unless you are too young. Kids…
- Start Writing More Classes got lots of twitter love. And an outstanding url.
- I’ve been thinking about documentation recently… The Principled Documentation Manifesto
- Tesla Model S REST API takes WebDriver to a whole new level
- A Browser Automation Standard is kinda amusing that the location is ‘Mountain View’ but David was broadcasting from ~ 8600 km away
- HTML5 Tutorial: Geolocation because this won’t be a pain to deal with…
- I think I like the diagram at Continuous Delivery vs Continuous Deployment but would suggest the top labels should be ‘Auto or Manual’
A Smattering of Selenium #142
Its a Wiggle your brain kind of morning…
- Automated Web Testing Is Hard is the launch announcement of ChemistryKit
- Watir-WebDriver with GhostDriver on OSX: headless browser testing — the WebDriver version of this would be very, very similar to this.
- jQuery 1.9.1 Released isn’t interesting from a new jQuery perspective, but the migrate plugin is. Likely old news, but was new to me…
- GRASP (object-oriented design) ‘is really a mental toolset’
- How Not to Design Pairwise Software Tests is even more useful when paired (pun intended) with…
- Using Data Driving Wisely
- The Importance of the DOM has a lot of stuff that my not-in-gear brain is capable of processing, but…
- Postel’s Principle is a Bad Idea. Sacrilege! Oh, wait, there is a patch.
- A brief chronology of SSL/TLS attacks can’t be automated, but good automation is to know what needs to be looked at by a human
- The Framework Superclass Anti-Pattern — for the record, my frameworks ‘require’ you have adapters to prevent lock-in. Oh, and they are Open Source…
A Smattering of Selenium #141
Its -12 Celsius plus windchill out. Why the heck is the office air conditioning on. Feel like I need a Mr. Rogers cardigan or something.
- Caret Navigation in Web Applications starts slow and then hurts your brain while reminding you that this automation thing isn’t easy.
- I don’t know NUnit or TeamCity so don’t know if Using TeamCity and NUnit to Start WebServer, Run Selenium Tests and Stop WebServer is useful or just a rehash of common knowledge. But here you are anyways.
- paratest-selenium is another parallel phpunit solution. I really want an official one.
- Why Everyone (Eventually) Hates (or Leaves) Maven is not Maven bashing [he says so in the 3rd last paragraph].
- The SeleniumCamp 2013 program is out. Of course, its in Russian but…
- Writing a Neo4j Puppet module for fun and profit is I think how a lot of trial stuff is going to be distributed. And Puppet is fun.
- Automated Testing: From “Testing” Activity to “Development” Activity is the sort of epiphany you will see more and more I think. Unsure whether this is a good, bad or just factual trend.
- About building a framework? Its in! How to make a basic test framework in C#
A Smattering of Selenium #140
- I suspect that scanner-backed-by-selenium belongs in the ‘with great power comes great responsibility’ bucket
- ios-driver is in the ‘wouldn’t it be nice if Apple provided this’ bucket
- Selenium WebDriver utility for determining when page has finished rendering is in the ‘ADF specific’ bucket’
- I suspect JSErrorCollector is in the ‘already indirectly linked to’ bucket. If not then its in the ‘FF only’ bucket
- Using a business readable language for browser automation is in the ‘bdd/atdd hype’ bucket. But is also in Haskell which is kinda interesting for an Se article
- reality is expensive: a better way of thinking about mock objects – Yup. ‘Fake bucket implementation’ bucket.
- The bits in Android’s tablet quality page would be even nicer if Android wasn’t in the ‘openly hostile to automate’ bucket.
- Stop Using Story Points gets added to the ‘read the comments as well’ bucket. Also the ‘this is how we accrue automation debt, kids’ bucket.
. Oh, and the ‘woohoo! I already do this stuff’ bucket.
A Smattering of Selenium #139
Posting from the past into the future. Or something… (its a scheduled post).
- webdriverjs-with-jasmine appears appropriately named since it claims to be A standalone (includes standalone Selenium server (30Mo) + includes Jasmine) working example of a test with WebDriverJS and Jasmine.
- Similar to the above, but with Drupal and Behat – Classic
- How I[he] send notifications to the build breakers. using twillio
- On Code Review comes from the Food For Thought department
- Orc is a model driven orchestration tool for the deployment of application clusters. Sounds cool.
- upgrading hacked dependencies — doncha hate when you do this?
- WAVE will tell you have well you do against their accessibility heuristics. Its no guarantee of course, but its a start.
- And why is it no guarantee? See Things I learned by pretending to be blind for a week.
- Dear SpeakerDeck; your embed method doesn’t work with WordPress. So here is a link to So, You Want to Be a Front-End Engineer?
- I was bored and experimenting with Py.Test fixtures here — and then got schooled in the comment section on how to actually do it.
A Plan to Drop Firefox 3.x Support
Selenium Conf 2013: Call for Papers and Early Bird Tickets
As we have done every year, we’re pleased to announce that a batch of early bird tickets to the Conference is on sale now, even before the talks have been finalized. You can get your ticket(s) by visiting http://seconf2013.eventbrite.com/. There are only 45 early bird tickets available at the special rate of $299, and they are only available until February 4th, so act now! After that the regular price of $350 will be in effect for all tickets. You’ll also notice that tickets to our workshop day are for sale as well. These cost $75 and entitle you to attend a full day of Selenium workshops on Monday June 10th.
More information on the conference is available at http://www.seleniumconf.org/, and we are still accepting speaker proposals. We’re looking forward to seeing you in June!
A Smattering of Selenium #138
<insert snark here>
- Debugging For Testers — they don’t teach this in testing school. Actually, there is a testing school…
- A million times this!! That’s not BDD, that’s just Cucumber
- Faster Websites: Crash Course on Web Performance — all three hours of video
- Continuous Integration of iOS Projects using Jenkins, CocoaPods, and Kiwi
- Clearing IE’s Caches – Not as simple as it appears is another one of those things that gives Jim headaches.
- Speaking of things that give Jim headaches; Revisiting Native Events in the IE Driver. Fun, fun, fun.
- We’re Doing It Wrong! What DevOps Needs to Learn in Order to Scale Up. is pretty good, but wow I dislike this slide system.
- why GNU grep is fast – The key to making programs fast is to make them do practically nothing
- Squash feels kinda like a wrapper about ‘git blame’ coupled with a log monitor, but still an interesting concept.
- Writing faster WebDriver tests isn’t necessary making scripts faster as it is about a clever abuse of the JS Executor
A Smattering of Selenium #137
Whoops, missed a couple days… ah well.
- MOAR ELEMENTS!!! the <main> element
- Dependency injection != Inversion of Control is useful reading. And the Waffle example is pretty funny.
- Not sure yet how I feel about this feature in the page-object gem.
- Waiting for an application to be fully loaded has some more examples of using a ‘proper’ [not implicit] waiting strategy.
- Most of us are not using Se for HVAT, but knowing the terminology, etc. can’t hurt – An Overview of High Volume Automated Testing
- The Exceptional Beauty of Doom 3’s Source Code – An ode to code indeed.
- Visual Studio considered Harmful. Or any other tool in your toolchain. You should be able to swap any bit up for one of similar functionality. The number of Eclipse programmers absolutely dwarfs the number of Java programmers.
- Centralized Selenium Logging with Graylog — alright, this is pretty trick.
- chrome-har-capturer uses Chrome’s remote debugging port to build a HAR file. Even works for SPDY traffic I believe.
- Opening a new terminal tab in OSX(Snow Leopard) with the opening terminal windows directory path – woah! AppleScript!
This short technical note is to announce that the Selenium project is now using git on Google Code in place of subversion.
The move has been a long time in the making, and it’s largely thanks to the efforts of Kristian Rosenvold that we’ve been able to do the migration and retain the project history. The project owes him a huge thank you! We’re in the process of migrating the last bits and pieces (none of which are user facing), so there may be some last minute turbulence as we settle everything down.
Although the canonical source will be on Google Code, we’re working on setting up a github mirror. We’ll announce the location of that once it’s set up.
A Smattering of Selenium #136
Someone go back to my past self and punch him for thinking that starting to get in shape was a good idea. OMGCANTMOVE.
- .NET Goes Immutable seems interesting. But I don’t really speak C# so it could very well be boring and uninteresting.
- Shadow DOM 101 is another part of HTML5 that makes me think this web automation stuff has a very limited life span. Between this and Canvas… ugh.
- Have I mentioned how much Canvas worries me? Snow in canvas land is an interesting post on debugging/improving performance on an little canvas app
- And in a similar vein, Why moving elements with translate() is better than pos:abs top/left
- I want to say that I’ve already linked to this, but I need it for a potential project so I’m linking it again – Modifying Python’s SimpleHTTPServer to accept directory aliases
- As a framework vendor I’m a bit worried about linking to Why Frameworks?, but there you have it.
- It both worries me, and impresses me, when people start needing to do Linux TCP/IP Tuning for Scalability
- Living in the cloud? Go read An Epic TripAdvisor Update: Why Not Run On The Cloud? The Grand Experiment. Now. The last link can wait.
- Understanding HEAD, HTTP/204 and HTTP/206 — What? You mean that there is more to HTTP than 200 and 404?
A Smattering of Selenium #135
Three in a row … of course, these are the easy three.
- Build, test and deploy Firefox OS apps for $0 (or any other currency that I don’t know how to emit)
- Ruby on Rails … in Bash. Because they can. Bash on Balls
- All you need to know about CSS Transitions except how the hell we are going to synchronize on them. Well, kinda does, but this is going to hurt.
- Speed Up Web Testing with a Caching Proxy has a speed-up trick I hadn’t thought of yet. And it also further complicates the moving parts in automation.
- Rails SQL injection vulnerability: hold your horses, here are the facts – I think every vulnerability should have a write-up like this.
- I hope I never feel the need to investigate an operator the way PHP equal operator == does.
- Now, investigating runners is something I’ve had to do a couple times. Reading MiniTest – part one, part two, part three, part four, part five, wrap up
- Using macros to create custom example groups in RSpec
- Hamcrest Quick Reference. Print it out and pin it to your wall.
- This. Is. Awesome. Mozpol – Provisioning Pandas
A Smattering of Selenium #134
Hrm. Office is closed until Monday, but everyone is in. Very confusing…
- One reason I have heard people say they don’t use cloud instances is they are afraid they will just sit around idle when not needed. Behind the clouds: how RelEng do Firefox builds on AWS has some useful scripts to find and teardown machines.
- Page Weight Matters is a fun little insight into how/why YouTube shed some of its heft. And a reminder that what we need is more stuff coming out of bandwidth starved regions since we have forgotten how to program efficiently in North America / Europe.
- Usetrace looks like the newest player in the Selenium-in-the-cloud space. Seems to use the Python bindings as the scripting language and host the scripts too.
- Did you know that you can modify the Se Server’s Grid functionality with plugins? Neither did I — or at least I don’t think I did… Here is a tutorial and another example.
- The interesting part of Whose bug is this anyway?!? is ‘Your computer is broken’ bit. Oh, and make sure that build machine is updated to what your developers are running…
- Modeling How Programmers Read Code is just cool.
- Speaking of reading code; Code Reading. I wonder if you gave this to a novice programmer if they would approach the above link differently.
- PhantomJS 1.8 “Blue Winter Rose” got lots of twitter love. As it should have.
- Cooperative multitasking using coroutines (in PHP!) is, I think, pretty awesome just by the my inability to fully grok what is going on. I also have no idea how to use this for automation purposes, but it seems like there should be some usage for it somewhere…
- So You Want to Write Tests is more mindset than code … but code has always been the easy part anyways.
A Smattering of Selenium #133
Since today is the start of ‘find a new contract’ I guess I don’t have an excuse to miss these for the next week or so.
(Oh, and Happy New Year, etc.)
- This is snark, but just makes me laugh given the hype machine around ATDD/BDD;
AS an angry userI WANT TO punch the developer in the faceSO THAT I CAN punch the developer in the face.
— Kristopher Johnson (@OldManKris) December 4, 2012
- Alright, this is also snark, but Why not make your URLs responsive? is an interesting ‘how would I automate this?’ question
- Adoption Of Exploratory Testing And Test Automation On The Rise is kinda sales-y [which is fine given the context], but if you swap in ‘Selenium IDE’ or ‘Selenium Builder’ for ‘TestStudio’ then you have the case for those parts of the suite.
- web++ is a single file webserver — in c++
- From 15 hours to 15 seconds: reducing a crushing build time is pretty good, though some very obvious developer tendencies sneaking in. The quick fix at the end, run the build entirely on the tmpfs in-memory file system seems in intriguing as well.
- Your periodic reminder that Simply Writing Tests Is Not Test Driven Development
- HTML5 canvas performance: Drawing circles — timing is something we’ll also have to care about in HTML5 apps.
- Falsehoods programmers believe about build systems. Yes.
- And I thought my brain hurt before reading display: none;. I was wrong.