Category Archives: blog

Snakes & [Web] Services

The other week I did a half-day tutorial at the Targeting Quality conference on using Python for automating Web Service testing. The rationale for this is that too many people are testing too much stuff in the browser — which is big and slow. Yes, the person who makes a living automating browsers says that [...]

HTML5 Media, WebDriver and Python

So again I was chatting with Jim Holmes and he asked me if I knew how to script HTML5′s video tag. I had never even looked at it so had a look. One thing lead to another to another and I had some code. But before I get that; The video tag is a Media [...]

Enabling logging in Selenium IDE

One of the things I never really figured out while I was maintaining Selenium IDE was to get all the log messages (and there are a lot!) to appear in the Firefox log. Or more accurately I suppose, I never bothered to figure it out. But thankfully Dave Hunt did figure it out. More for [...]

HAR, JSON Schema and PHP

One of the many projects I’m working on that are starting to weave together into something cohesive is a PHP wrapper for the BrowserMob Proxy. What is interesting with that from an automation perspective is inspecting the HTTP response codes when loading a page; WebDriver will not grow this feature so you need to get [...]

Implicit Waits, Implicit Evil?

I was in a vendor talk by Jim Holmes of Telerik[1] last week where he was showing how to do some simple things in both his product and Selenium. One of things was the use of implicit waits. I mentioned to him afterwards that I actually try to avoid them in my code. This was [...]

Starting from Scratch with RC, Python and Py.Saunter

So the San Jose Selenium meetup featured Py.Saunter which is both awesome(!) and sad that someone else other than me publicly demoed my framework before I have. Here is some annotations to go along with Mary Ann’s presentation which was recorded using Adobe Connect and can be viewed from her blog. 1:40 – Why RC? [...]

Okay. Maybe a Singleton wasn’t such a hot idea

For Page Objects to work, there needs to be a way for each class to get a reference to the current browser instance. When I first needed a single, globally available ‘thing’ I learned about the Singleton pattern and latched on it. Yes, the Singleton pattern has a poor reputation in some circles but it [...]

Soft Asserts and py.test

def pytest_runtest_makereport(__multicall__, item, call): if call.when == "call": try: assert([] == item._testcase.verificationErrors) except AssertionError: call.excinfo = py.code.ExceptionInfo() rep = __multicall__.execute() return rep This ‘clever’ function took me almost two days to figure out how to do. And meant that I had to learn waaay too much about how py.test behaves behind the scenes so this [...]

Looking for a SaunterPHP Beta site

I am happy to announce that SaunterPHP has been made available to the world. For a lot of teams, getting started and getting all the infrastructure in place for automation is often harder and more time consuming than the actual automation. SaunterPHP addresses this problem for PHP through convention-over-configuration. These conventions include Page Objects Easy [...]

Not All Huge XPath is Evil XPath

There is a lot of XPath hate in the Selenium world. Some of it justifiable, but a lot of it is bandwagon-ism and results in hatred for all things XPath. Here’s the rub though, sometimes you really do need XPath and when you do, its power is pretty impressive. Yes, more powerful than CSS Selectors. [...]