Archive for September, 2011
DevCon 11 writeup
Gör en sån där liten sammanfattning av ett event jag har varit på. Denna gång var handlar det om DevCon 11, som hölls i Karlskrona. Konferensen varade två dagar och var av det mindre slaget, kring 100+ deltagare. Jag måste dock säga att det var en av de bästa konferenser jag varit på! Storleken gjorde att man verkligen fick tid att prata med folk, lära känna nya människor och utbyta idéer och erfarenheter, till skillnad mot att trängas med 1000+ personer, köa till toaletten och slåss om fikat.
Konferensen hade två spår ”Software Craftsmanship” och ”Technology”. Det som ingick i respektive spår var lite slumpmässigt, men det gjorde ingenting. Arrangörerna hade verkligen lyckats få dit bra talare och fick till en bra spridning på ämnena.
Ur en talares synpunkt fungerade allting väldigt väl. Tekniken funkade, bra volym på micken, bra moderering och tidhållning. Alla skötte sig med tiden också J
Själv fick jag jättemycket behållning av dessa två dagar. Inte nog med att jag träffade väldigt många riktigt duktiga personer; jag såg till att pricka in ämnen som jag inte kunde så bra, så marginalinlärningen blev hög.
De föreläsningar jag av olika skäl fick mest behållning av var:
- Keynoten av Joakim Jardenberg. Inspirerande och lite skrämmande för en som inte är med i Facebook.
- Managing complex projects with Maven 3, Lennart Jörelid
- Exploratory test design, Rikard Edengren
- Clojure – Data Structures and Concurrency Mechanisms, Ulrik Sandberg (via en komprimerad privatsession, eftersom vi talade samtidigt. Tack!)
- Bägge av David Jacobys säkerhetsföreläsningar
- OSGi – 10 years ahead if their time, Christer Larsson
- Asynchronous Programming with Node.js, Anders Janmyr
- Is your REST Assured, Johan Haleby.
Alla andra föreläsningar, som jag var på, var också mycket bra, men jag kunde ämnet, så de tjänade mer som kvitton.
Sammanfattningsvis kan jag konstatera att jag fyllde på med introföreläsningar i teknologier jag inte kan så bra: Node.js, Clojure, OSGi.
Den stora ögonöppnaren var nog ändå att jag började förstå vad polyglot-programmeringen går ut på och varför den är bra. Jag har länge avfärdat en del språk och paradigmer som kuriosa och leksaker som inte skulle klara av enterprise, men efter denna konferens får jag nog omvärdera mina åsikter.
Converting Selenium waitForCondition to WebDriverWait
Posted by alexander in Kära dagbok on September 11, 2011
I usually don’t write simple tutorial posts, but I’d like to share this one, because it took me some time to google the answer, and I still had to adapt it to my case.
I had the simplest possible vanilla Ajax application, that would react to keystrokes in a textfield and then return a list of words based on the entered value. You see this everywhere! My particular HTML snippet looked like this:
<body onload="document.getElementById('prefixText').focus()">
<input type="text" id="prefixText" onkeyup="checkForExpansion(document.getElementById('prefixText').value)"/>
<br/>
<span id="ajaxResults"></span>
</body>
checkForExpansion just made an asynchronous call the a servlet that returned a list of completions. However, one thing was a little untypical with this application: The results went in as strings separated by <br/> tags into the span element. The consequence of this was that there was no obvious element to wait for when testing this page; the span was there already.
Now, my first test went like this:
@Test
public void trivialAjaxListCompletionExampleUsingSelenium1StyleWait() {
Selenium selenium = new WebDriverBackedSelenium(webDriver, testedUrl);
webDriver.get(testedUrl);
webDriver.findElement(By.id("prefixText")).sendKeys("a");
selenium.waitForCondition("selenium.browserbot.getCurrentWindow().document.getElementById('ajaxResults').innerHTML.indexOf('ALEX') > 0", "1000");
}
It worked, but it relied on WebDriverBackedSelenium, which I really didn’t want it to. After some googling and experiementing, I came up with the followging:
@Test
public void trivialAjaxListCompletionExampleUsingWebDriverStyleWait() {
webDriver.get(testedUrl);
webDriver.findElement(By.id("prefixText")).sendKeys("a");
boolean isListPopulated = (new WebDriverWait(webDriver, 1000))
.until(new ExpectedCondition() {
public Boolean apply(WebDriver d) {
JavascriptExecutor javascriptExecutor = (JavascriptExecutor) webDriver;
return (Boolean)javascriptExecutor.executeScript("return document.getElementById('ajaxResults').innerHTML.indexOf('ALEX') > 0");
}
});
assertTrue(isListPopulated);
}
As a test, this sucks, but this snippet shows several interesting things. First we have the WebDriverWait class. Waiting can be quite fine-tuned using the FluentWait class.
Then we have an example of the browserbot being dropped (since it’s a Selenium 1 thing) and Javascript with a return (mandatory in Selenium 2).
Finally, we have the boolean test. Many examples on the web are written so that they wait for a certain element to appear, and then return it. Since the element (the span) was already present, I wanted to make the example a little odd.
Installerar monsterfläkten Noctua NH-U12P

Mycket geekande nu. Köpte en födelsedagspresent till mig själv: monsterfläkten NH-U12P från Noctua.
Egentligen håller jag inte på med överklockning, utan vill ha en tyst dator, men min andra dator blev tvungen att köra på en riktig stock-cooler, så jag bestämde mig för att transplantera CPU-fläkten från min nuvarande dator till den, men då behövde jag en ny. Då tänkte jag att det är lika bra att köpa något ordentligt, instället för något skit för 300 spänn.
Installationen tog drygt två timmar, eftersom jag fick rycka hela moderkortet, rengöra CPU:n och trassla med sladdarna till fläktkontrollerna. Manualen är tydlig, och hela produkten andas kvalitet. Monteringsdelarna för AMD och Intel är tydligt separerade, så det vara bara tuta och köra.
Allt gick smärtfritt, och jag fick ihop alla sladdar inför första starten. Självklart körde jag med bägge fläktarna som följde med. Kan också nämna att lådan jag körde med var en Antec 300, och ja, fläkten passar, även med sidofläkten intallerad. Har googlat detta själv, för det är inte självklart.
Kan nämna någonting om ljudet också. Alla fläktar förutom en i den låda är just Noctua-fläktar. Att köra två P12:or till i 1000RPM bidrog inte direkt till att höja ljudnivån.
Nu i efterhand måste jag säga att det var kul att installera denna fläkt. Normalt vill jag bara få det att funka, men den här har tillräckligt många delar man ska skruva fast och greja med, att man känner att man bygger ihop något. Lego
.
Halvvägs: moderkortet ryckt, CPU:n ren, monterkingsskenorna på plats.
Kände mig sen tvungen att överklocka lite defensivt bara för att, och då blev det så här med Prime95 och bägge fläktarna på 1000 RPM:
TDD in JavaScript
This is not a big leap for humanity, but it’s a big leap for me. Today I officially tried doing TDD in JavaScript. The task was perfect: implement a widget that would render a simple markup language that had almost a 1:1 correspondence to HTML. The markup looked something like:
|F02|Hello world!|B|This is bold|/B| etc. There are always some gotchas (like unbalanced tags and alike), but the task was perfect for state-based testing.
I googled TDD and JavaScript and found jsUnit. It was amazingly simple to get started with. Just downloading and adding a reference to the library. The idea is that you put your code under test in one file, and you create an HTML-file that references jsUnit and your tested code. That file also contains your unit tests. This is very clearly documented on the framework’s site, so I won’t repeat it here. Then you load another HTML-file, which is the runner. You point out your HTML-file with the tests and of you go. That’s all there’s to it.
This is the first time I’ve tried doing this for JavaScript, so I have no references and cannot make any comparisons. However, I got a very positive impression:
- The framework is really easy to install.
- It mimicks’ JUnit very well (it has
setUp,tearDown, tests start withtest, and the basic asserts are the same) - The runner looks nice
To truly recommend jsUnit, I’d like to figure you how well it runs in batch mode, and what it can actually do. I’ve only tried basic asserts so far. Anyway, It’s a cool tool worth trying only for the fun of it.
If I keep using it and it proves inadequate, I’ll probably write a post like “Why jsUnit sucks”



