Android and iOS Support

TL;DR: We’re retiring Selenium’s own AndroidDriver and iPhoneDriver in favour of any of Selendroid, iosdriver and Appium.

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.

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.

Panel

David Burns (@AutomatedTester)

Dave Haeffner (@TourDeDave)

Jim Evans (@jimevansmusic)

Kevin Menard (@nirvdrum)

Timeline

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?

Links mentioned

Figuring Out What To Test

How to get involved with the Selenium Conference

Where to contribute to Selenium Documentation

Selenium Hangout 2 Recap

This is a recap from the most recent Selenium Hangout (a.k.a. The World’s Best Selenium Meetup).

This is a recap from the most recent Selenium Hangout (a.k.a. The World’s Best Selenium Meetup). For info on future meetups, follow them on Twitter.

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.

Panel

David Burns (@AutomatedTester)
Dave Haeffner (@TourDeDave)
Kevin Menard (@nirvdrum)
Simon Stewart (@shs96c)

Video

Minutes

00:00 – 05:04

Goal and items for today’s conversation
Feedback review from last meetup
Intros

05:05 – 07:34

API changes
Packaging
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

Documentation

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

Where to submit feedback and request topics for future meetups

Mobile WebDriver

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.

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.

The agenda for the past two days can be found here, and the minutes are also available.

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

Selenium 2 was released in July 2011…

Selenium 2 was released in July 2011. It’s now two years old, and what a couple of years it’s been! The WebDriver APIs, which were the major addition in Selenium 2, are now the basis for a W3C standard, and there are implementations written and supported by Google, Mozilla and Opera. There have been 34 releases, with official support for Java, C#, Python, Ruby and Javascript, and the community has stepped in to provide bindings for Perl, PHP and others. There have been 57 different people authoring changes in the code base, and countless more participating in the online forums, offering help and advice.

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.

Trying to find every excuse not to cut the grass … including apparently closing some browser tabs.

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.

Brain fried from PyCon Canada 2013 and ‘some’ browser tab is misbehaving which means its time to start closing some of these.

The World’s Best Selenium Meetup

Note from Adam: This is a guest post from Dave Haeffner who, along with David Burns hatched this idea at SeConf2013.

Note from Adam: This is a guest post from Dave Haeffner who, along with David Burns hatched this idea at SeConf2013.

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.

A ‘should be scripting, but brain stuck in neutral so closing some tabs’ edition of the Smattering.

A Smattering of Selenium #154

Apparently today’s ‘wait for an email’ task is to whittle down the smattering queue some more.

Apparently today’s ‘wait for an email’ task is to whittle down the smattering queue some more.

A Smattering of Selenium #153

A Sunday Smattering? Sure!

A Sunday Smattering? Sure!

A Smattering of Selenium #152

40-ish minutes until midnight eastern so that counts as two days in a row, right? Right?

40-ish minutes until midnight eastern so that counts as two days in a row, right? Right?

A Smattering of Selenium #151

Almost a month after the last one.

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.

A Smattering of Selenium #150

Yup, this smattering has very little to do with Selenium, but… 150!

Yup, this smattering has very little to do with Selenium, but… 150!

A Smattering of Selenium #149

Too. Many. Tabs.

Too. Many. Tabs.

A Smattering of Selenium #148

Gotta start this up again…

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.

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.

So we cut in the talks with a score between 2 and 3. This put us up to 23 talks, so we had to begin some horse-trading. We started to have some difficult conversations when I realized that I had somehow not scored one talk at the bottom of one tab. I applied the formula to that cell, and it had one of the best scores of all–so we had 24! Huzzah!

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.

My. Get. Productive. I know! I’ll push out a smattering. Oh. …

A Smattering of Selenium #146

Happy ‘productivity destructive week’ — otherwise known as March break.

Happy ‘productivity destructive week’ — otherwise known as March break.

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.

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.

A Smattering of Selenium #144

Real Canadians watch curling instead of hockey.

Real Canadians watch curling instead of hockey.

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.

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.

A Smattering of Selenium #142

Its a Wiggle your brain kind of morning…

Its a Wiggle your brain kind of morning…

A Smattering of Selenium #141

Its -12 Celsius plus windchill out.

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.

A Smattering of Selenium #140

Buckets!

Buckets!

A Smattering of Selenium #139

Posting from the past into the future. Or something…

Posting from the past into the future. Or something… (its a scheduled post).

A Plan to Drop Firefox 3.x Support

The support policy of the selenium project for Firefox browsers is to support the current and previous stables releases, as well as the current and previous ESR releases. At the time of writing, that means the supported versions are “10” and “17” (ESR) and “17” and “18” (stable channel). In addition to this, we are […]
The support policy of the selenium project for Firefox browsers is to support the current and previous stables releases, as well as the current and previous ESR releases. At the time of writing, that means the supported versions are “10” and “17” (ESR) and “17” and “18” (stable channel). In addition to this, we are currently supporting Firefox 3.x too.
This is an official announcement that we are planning to end support for Firefox 3.x in the near future in RC, WebDriver and Core/IDE, and this is your chance to be involved in that decision. Unless there is a strong reason to do otherwise, I shall shortly be announcing a timeline for the end of the support of 3.x
Once support for Firefox 3.x is removed, the earliest supported Firefox version will be the ESR-1 release (currently Firefox 10).
Rationale:
Firefox 3.x is no longer actively supported by Mozilla, and this has been the case since April 24, 2012. Since this time, 3.x has dropped to under 1% of global Web traffic (0.62% at the time of writing according to StatCounter) Continued focus on supporting an effectively dead browser prevents the selenium team from using features in the newer releases for little benefit to you.
Continued support of Firefox 3.x by the selenium project gives the impression that that particular version is still a valid option used by the population of the Web. This is simply not the case, and it may mean that testers efforts are being spent fixing problems that almost no users will ever see.
What you can do:
If you agree that this is the right choice, then you do not need to do anything. If you disagree strongly and have the numbers to back up your position, particularly if you can help work on Firefox 3.x support, then please reply to the selenium-user google group.
On a personal note, I know that a lot of you may well have firefox 3.x support in your test plans and will be distressed by this plan. Please take the time to look at actual usage logs from your sites and applications to verify that continued support is worth your time and energy before responding. I’d really appreciate that.

Selenium Conf 2013: Call for Papers and Early Bird Tickets

This year’s Selenium Conference is slated for June 10 – 12 in beautiful Boston, Massachusetts.

This year’s Selenium Conference is slated for June 10 – 12 in beautiful Boston, Massachusetts. The conference will be held at the Renaissance Boston Waterfront Hotel. Similar to last year, this year’s conference will kick off with a full day of Selenium Workshops, followed by a two day, two track conference. If you’ve always dreamed of speaking at a Selenium Conference there’s still time to submit a talk to us at http://www.seleniumconf.org/speakers/.

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>

<insert snark here>

A Smattering of Selenium #137

Whoops, missed a couple days… ah well.

Whoops, missed a couple days… ah well.

Source Control

This short technical note is to announce that the Selenium project is now using git.

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 (http://selenium.googlecode.com/), 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.

Someone go back to my past self and punch him for thinking that starting to get in shape was a good idea. OMGCANTMOVE.

A Smattering of Selenium #135

Three in a row…

Three in a row … of course, these are the easy three.

A Smattering of Selenium #134

Hrm. Office is closed until Monday, but everyone is in.

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.

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.)