H&R Block bug functional email bug..

I got around to doing my taxes today at H&R Block. I went to the one on the UWS because I read somewhere that that particular office got rave reviews for their service and their knowledgeable tax reps. After my taxes were done, they indeed did a terrific job and I was pretty pleased. I had to cancel a few times to come in and they didn’t get all bent out of shape like my dentist does so extra points for them. I was thinking they would apply a fee to my refund and this was somewhere in the fine print for people who don’t cancel in time. Good for me, this wasn’t the case.

They even sent me a nice email saying some pretty good customer-based stuff. I however noticed, and it was the first thing I read right in the salutation, that they had made a label error. I don’t think anyone or any copy editor scripts a formal letter that starts off with; Dear [First Name-Earl] [Middle Initial-A].

Something tells me they wanted the salutation to be in the format of either:

  • my first name only
  • my first name and last name
  • my first name middle initial and last name
  • My first name

You can see where I’m going with this. There’s also the problem of the salutation being in all caps. Let’s do some functional testing on those emails and put it through the proofreader.



Internet Explorer 6 is not dead enough..

Wanted Dead

On Dec. 31st, Microsoft finally announced that Internet Explorer 6 has dropped below 1% in the United States. This usually signifies some type of death in the browser world when your number have fallen below this particular number. When the news first dropped, I was literally ready to rejoice. Whenever I’m tesing a website in Internet Explorer 6, I usually make a separate section in my bug repository just to house all of the nasty CSS issues in IE 6 because of it’s ridiculously poor support for web standards.

When I say web standards, I usually mean HTML 4.01, XHTML 1.0, CSS 2.1, DOM Level 2, and the ECMAScript Language Specification. These are published by international standards organizations, and together,well, define the backbone of the web. So it’s not much of a surprise that Internet Explorer 6 may soon be forgotten.

However is this not really truly the case. As it stands today, these are the current stats of users around the world using Internet Explorer 6.

IE 6 die

World-wide users are still at 7.7% and the U.S. is at 0.9% which means this number has not really dropped much in the U.S. since this announcement in December. So why aren’t we like Norway, Denmark, and Finland whose usage is below 0.5%? Many of the 0.9% here in the U.S. are apparently corporate users tied to old network structures, like me.

So why am I still using it, regardless of the fact that it Well because although these numbers are pretty low, most of our exiting client’s web sites were built to support IE 6 and whenever we make a new deployment, it still has to support IE 6 as per the client. Also, because it’s an iffy grey area about whether to support it or not (Supporting IE 1.1 isn’t so iffy.) because the entire world has not completely jumped on the bandwagon to finally put this browser to rest. Therefore we are stuck developing for this browser and I am stuck testing for this browser.

Now during our requirement building phase with new clients, we now ask if the client wants their new site to support Internet Explorer 6 when we build it. Most, if not all of the time the answer is yes for various reasons. While performing user acceptance testing, the client will also be using Internet Explorer 6 as the foundation for giving feedback and making enhancements, granted they are tied to their old network structure, just like me.

Putting code on your site to state this fact hasn’t worked. Personally declaring ‘I’m officially ending my support for IE 6’, won’t do it either. If you see a half-dead animal on the side of the highway, rejoice in it’s death, but at the same time periodically perform CPR on that half-dead animal, he won’t just die right away. In turn, this is the case with Internet Explorer 6; we simply just have to stop catering to this browser and stop asking the question. And if we are still asking the question, IE 6 really isn’t dead enough. We just have to pull the plug and let go.

I found a CSS bug today on Linkedin..

I was posting a comment on a linkedin group thread today, and I found this little bug. I was a bit curious as to what would happen if a new dynamic message appeared on the site and I triggered an existing flag. The results are below. I was able to reproduce this in all of the major browsers.

Test Case:
Precondition: User has an existing log-in and is part of a group that they can post to.
1. Navigate to Linkedin
2. Log-in with existing credentials
3. Post a comment on a thread. (You can delete it temporarily), click any of the existing menu items.

You will see the following:

Linkedin Bug

The text that was hidden was ‘Click on’ that I could not see or click on, then the visible text ‘Poll to get started’. This is the type of bug that I dislike the most. A bug that affects a major function of the site; even if it’s a message to get to that function.

Tested on: Mac with Parallel’s Desktop (Win 7, Vista, XP)
Browsers: Shipped

Getting a list of all link URL’s on a page with Selenium..

You get a list of all URLs on the page by using the getHtmlSource command to get all of the HTML source code from the page. You can then use either a regular expression or HTML parser to extract what you’d like. In this case; all of the a href elements on the page.

If you’re using Selenium, you can the following code into your script.

This will open up yahoo.com in Safari and get a list of all the link on the page and put the output into your console. If you use this as a function for every page that loads, the output in your console could get pretty lengthy if you’re dealing with multiple pages. It would be better to have this output in a text file.

If you’re using JUnit Reports to do your reporting, you can easily have all that information output into a text file. If you’re new to reporting, please see my post on how to set up JUnit reporting in Eclipse with Junit and Ant.

public void setUp() throws Exception {
selenium = new DefaultSelenium(“localhost”, 4444, “*safari”, “http://www.yahoo.com”);


public void testUntitled() throws Exception {


String htmlSource = selenium.getHtmlSource();
Pattern linkElementPattern = Pattern.compile(“]*href=\”[^>]*>(.*?)“);
Matcher linkElementMatcher = linkElementPattern.matcher(htmlSource);
while (linkElementMatcher.find()) {
Object myurl = selenium.getLocation();

public void tearDown() throws Exception {

The strongest 404 page error…

Megaupload, a major digital locker was recently shutdown recently pursuant to an order issued by a U.S. District Court. In the wake of these events, the shutdown has raised some major concerns about online legal content.

Some companies have already begun changing their policies due regarding content that is copyrited. Filesonic.com, another popular digital locker stopped allowing people to download files that they had not uploaded themselves. Uploaded.to also blocked access from Internet locations that are in the U.S. It seems this may cause a ripple effect for other popular digital lockers as users may be too afraid to upload any media content to lockers out of fear they will be shutdown just like MegaUpoad. Their redirect which I tried to break is pretty much unbreakable and they mean business due to the Federal flier that they left hanging on their domain.

So what does this mean for users of MegaUpload? Let’s take into consideration that lockers are more user friendly in general, and this is one of the main reasons why sharing has become so popular. Your grandmother could basically open her email, click on a link and download a copyrited movie, or any other type of copyrited media your grandmother may be into.

Alternatives such as BitTorrent and PirateBay, are much more difficult to use, but they are also completely FREE. Due to the higher complexity of these peer-to-peer sites, I can only imagine grandmothers across America will start using torrents along with the rest of post-shutdown Megaupload users, as the gravy train it now just, stopping at a different station.

Piratebay doesn’t even seem afraid. I had gone over to their site after the jump, and expected to see a banner of man shivering and sweating, with a cartoon caption ‘I didn’t upload anything, I just host the domain’ plastered horizontally across that banner.

PirateBay didn’t really seem to care about the fall of Megaupload from what I could tell. It’ll be interesting to see if there is a rise of users that start using torrent to get their files. The next time you go over grandma’s house, she may just be a seeder.

In the meantime, please see the indestructible custom 404 page that the authorities have put in place to let you know, downloading is not so legal! If there were 500 Errors, this page wouldn’t change.

Custom shutdown

Best Practices for null Search Validation

As long as I can remember, I’ve always seen sites with search functions where the user can search the entire site they are served. I’ve always thought what would be the proper treatment to pass null values into the search query.

Usually, validation messages are in place to treat the negative cases involved in testing the Search Feature that you can find on most sites. I’ve seen so many different treatments of how these fields should be validated, but the same rules always apply to the leaders in the game. The game becomes more interesting as there is usually no real estate to put in Search Validation messages.

What does this mean for us testers? We have to observe and explore flows of the folks that have somewhat standardized what the expected behavior of this commonly used function should be.

Let’s see the results:

1. AOL -Search nothing happens when you click Sumbmit, meaning you’re starting from scratch.
2. Yahoo – Directs you to the an alternate Yahoo search page similar, where you can do a ‘formal’ search. (I have a feeling some serious searching is about to be started.)
3. Google – Hitting submit with a null value will get you nowhere on Google as well. You’ve searched for nothing, so you’ve got zero results.
4. Bing – Hitting submit with a null value will also get you nowhere on Bing. You’ve searched for nothing, so you’ve also got zero results. Bing does give you some interesting rollovers to interact with though.
5. eBay – eBay get it’s really right in the fact that if you enter in a null value, it will take you to the site map with every category you possibly could ever want to navigate to and may also prove intuitive to optimize your custom search results to what categories are displayed.

So what’s the best solution? Judging by what these guys are doing, it’s safe to say, your target should end up in either the target’s sitemap OR nothing should happen as the user has not searched for anything. Mobile users hate typing especially on a moving train. It makes them unconsciously nervous to have to think about typing on such a small device.

With that said, No. 1,2,3,4 are all good options. They give you what you searched for; which is nothing. eBay however, gives you a sitemap and the ability to do the same search again; therefore offering you more options than one.

What shouldn’t happen is having your Search results based on the keyword (Search). I did this on NYPOST.com and got the following:

NYPOST.com Search

2460 Results for the term ‘Search’.

This is a lot to sift through.

You’re in good hands with Allstate, just don’t try to get a quote from their site.

As of late, I have not been in the mood to browse around sites looking for bugs and providing some light commentary to accompany it, like I’ve kind of been doing back in July. I think these are the times when I’d like to believe that software isn’t buggy by nature, and we live in a happy world where software always works as expected.

Well, studies show that there’s a good ratio people that visit product websites right after viewing the commercial for that product.

So I was watching the Allstate commercial with that stately actor from some show who decided to supplement his income by being the spokesman for an insurance company, and decided to take a walk over to their site to see what they were up to, in terms of site quality. The commercial was well-done. I was even convinced I was in good hands and I didn’t even get the insurance yet. 

I head over to Allstate.com and decide that I want to get a quote; but say to myself what if I put in the wrong zip code to try and get a quote. Well this was certainly the beginning of sorrows, as I didn’t even get through that test case as all of a sudden, scrollbars started showing up without me finishing filing out the form.

Allstate Errors 1

What follows next is a series of mishaps that I’ve landscaped for you to see how buggy just trying to get a quote on this site really is.

Allstate Error 2

In Step A, I’ve tried to get a quote, but did not finish before i started seeing browser display bugs

In Step B, I’ve actually entered in a valid zip code, but when I hit submit, the form does not want to submit so I stay stuck on this screen. This may be due to the sequence A, but who really knows. I just know that this should work. After Step 2, I did get this nasty error in my console

Unsafe JavaScript attempt to access frame with URL http://www.allstate.com/ from frame with URL https://plusone.google.com/_/+1/fastbutton?url=http%3A%2F%2Fwww.allstate.com%2F&size=medium&count=true&annotation=&hl=en-US&jsh=m%3B%2F_%2Fapps-static%2F_%2Fjs%2Fwidget%2F__features__%2Frt%3Dj%2Fver%3DIjHMVWTYCO8.en_US.%2Fsv%3D1%2Fam%3D!uCQzFzhDAFyICoUOFQ%2Fd%3D1%2F#id=I1_1328122409897&parent=http%3A%2F%2Fwww.allstate.com&rpctoken=655735623&_methods=onPlusOne%2C_ready%2C_close%2C_open%2C_resizeMe%2C_renderstart. Domains, protocols and ports must match. – The Console

In Step C, I get fed up with quote finder and want to find an agent. I enter in an invalid zip code and got the screen from C. Notice what happens here; the validation is completely different and is now happening inside the input boxes. However, I will never know what that validation message is because half of it is hidden, and that input box has onFocus property that instantly deletes this validation message if you place your mouse cursor in the input field.

In Step D, it’s the same deal as Step C, except this time the buttons have totally shifted on me and the layout has changed.

The bug that broke the tester’s back is the bug below when I tried selecting the state with other error states enabled.

AOL Errors 3

You know, any time your form changes on the screen and there is no consistency in functionality, you are certainly going to leave your users confused and unempowered. It never hurts to check your reset button in various forms, especially if there are ajax calls or state changes as you fill out the form.

Tested in:
Windows 7
Chrome v16.0.912.77 m

Getting Started with JUnit Reports with Eclipse and Ant…

So a lot of people have been asking me about how to create JUnit Reports with their automated test cases. I’m going to show you how to create these reports in the easiest way possible. You will not have to download anything, add any code, etc. You will only have to use generate the HTML report using Ant with Eclipse.

The first think you have to do is generate the Ant build. You can do this by:

1. Right click on the project and
select Export –> Ant Buildfiles (this will be under General) –> Next–> Select the project that contains your JUnit tests –> Finish.

The default JUnit output directory is appropriately named “junit”.

2. The next thing you have to do is resolve your dependencies by making sure that the junit.jar is added to
Ant’s “Global Entries.”. You can do this by.

Window->Preferences->Ant->Runtime->Global Entries and Add External JARs… Navigate to your “eclipse” directory (where eclipse is installed). It is under “plugins” directory and presently the junit.jar is in a directory named “org.junit_3.8.1”. If this is missing then you will see error messages since
junit is an optional Ant task.

* If you are using a Mac, Preferences are under the the Eclipse menu.

3) Finally, right-click on the Ant build file build.xml (this file is the one you created in Step 1) and Run As->Ant Build. This will display a list of targets. All of the launch configurations you have previously configured will have a corresponding target in your Ant build file. Select the desired target(s), and also select the “junitreport” target (very important). Check the “Target execution order” text area to make sure the junitreport is run last.

As you can see I’ve specified the order in which I want my cases to run (below)

JUnit Targets

Whenever you run a test case it will generate results and will be placed in the junit output directory. These results are formatted into an HTML report by the junitreport target and stored in the junit output directory.

As you can see below my automated Test Suite has completely run and you can see which tests failed and which passed (below). I see my cases for login, registration, and account-sign up are failing. Upon further investigation, these are failing because the web service is down on our staging server.

Pass or Fail

This is a fast and easy explanation of how to create JUnit HTML reports, but hopefully it helps get you off your feet. Next time around, we’ll have some more fun when I show you how to extend this output to get more information displayed in the report. For example to add an additional column which contains link to a screenshot taken by the test.

Happy Testing!

QA is Exciting

I can’t really tell if this software tester is being serious or not, or if she just needs a vacation. However, I do believe QA can be exciting. If you liked breaking your toys as a kid, you’ll probably enjoy breaking applications as well.

But just between you and me, I think I only broke them when I wanted new ones. I do vaguely remember that there was some enjoyment while committing the act.