How to overcome occasional ElementClickInterceptedExceptions

When working with modern, dynamic websites, there are a lot of moving, animated things. Here’s a quite simple trick to click on those successfully.

Recently I had the following challenge: Click on a button, which quickly becomes visible and enabled, but might move after an expanding section above it is loaded.

This typically causes a ElementClickInterceptedException as the click was aiming at the previous position of the element and now hits the expanding section.

Usually, I try to solve this kind of issues with a WebDriverWait to wait for the expanding section to have a certain vertical height. …

Jenkins Blue Ocean view showing a complex pipeline with parallel conditional stages
Jenkins Blue Ocean view showing a complex pipeline with parallel conditional stages

In this article I’ll show how to express conditionals — like if, else or switch — in a Jenkinsfile using the declarative pipeline syntax.

Optional Stages (≅ if)

Generally it is possible to use Groovy’s conditionals in a declarative syntax, when we use a script step.

So for example, if we only want a release to happen, if a certain boolean parameter RELEASE is set, we code it like this:

But in that case, we end up with a stage that looks like it was successfully executed, but in fact it didn’t do anything.

Welcome to the Open Cyber Space

Recently I participated in my first remote open space. Here’s what I learned.

At first I was really sceptical if the idea would translate well to a remote scenario, given my experience with sessions where some people participated remote. In these sessions, remote participants were very passive. They had a hard time speaking, since the non-remote participant were simply louder and had no delay. Also drawings on whiteboards or flipcharts were not recognizable through the webcam. …

One of the most important features of Apache Maven is its ability to retrieve dependencies from repositories. For that we need to define which version of a dependency we need for our product. For some dependencies it’s just fine to pick one exact version –e.g. 1.23– which works flawlessly.

However, for some dependencies we’d like to just pick the latest version from a range. For example I’d like the Selenium version to be just the latest 3.x but want to avoid breaking API changes that will probably happen with 4.0. And Maven does have a feature for that: version ranges.

Combine very Groovy browser automation with instant test browsers via Testcontainers

Getting a browser on you CI/CD environment is one very common problem when doing web UI tests. Testcontainers solves this issue quite well by simply relying on Docker to create a container, which has the container installed.

The documentation about this –and also most examples that can be found– are using JUnit to demonstrate the configuration of the Testcontainers and actually this can be transferred to Spock as described in the docs. However, transferring the Webdriver Testcontainer to my Geb tests.

Geb’ config mechanism uses a Groovy config script (see ConfigSlurper) to create the WebDriver, so it makes sense to…

Photo by Ildefonso Polo on Unsplash

Here are some complicated and a very simple idea for a solution

Since I’m developing microservices, I always wanted to test the all my services on Jenkins. Back in the days I was relying on test doubles like H2 for Databases or Spring Kafka’s embedded Kafka, but these days I prefer to get the reals stuff and fire it up using Docker.

One of the biggest issues with this kind of setup for me was the problem that these dependency containers take need ports for the service to connect and when two services are running their tests at the same time on the same Jenkins, the ports are already taken.

Complicated Solution 1: Use Random Free Ports

Of course…

Put simple scripts to link to you code’s continuous integration, logs, documentation etc.

Recently I wrote about a quite sophisticated script, which opens Kibana for a certain service with all the right filters (see Kibana via Command Line) instead of having saved searches or quite a list of out dating URL’s within your

This is quite a universal concept: you could write a script to take you to your continuous integration job, your issue management filter, your source code management tool, no matter if you use Jenkins, JIRA, Confluence and BitBucket (like us) or a completely different tool stack.

So here is the basic script to simply open a given URL under Linux, as well as OSX or Windows:

And here — as another example — is my new script to open the Jenkins from the repository it is placed in:

Just another useful script

If you — like me — have a lot of Maven project on your machine, you might know the problem of huge und useless target directories spread across several project directories.

This script simply executes mvn clean for each pom.xml file it finds in any subdirectory.

Introduce a Matrix to your task board’s backlog section

Do you put technical debt to your task board? Do you review it or limit it? Has it become a spot on your board you just don’t look at anymore? Does the color of the stickies start to fade? Well, we had that problem and tried quite some things to solve this, but some of the stickies just turned that old, nobody remembered why they were put up anyway.

Today we reviewed all of these and tried to sort them into a simple matrix roughly following the The Eisenhower Method.

On the horizontal axis sorted from left for hard or…

Access the log your way

Kibana is a great tool to search for logging, especially in a large microservice environment, like the one we got at REWE digital. However its default view just does not work for me.

We use JSON logs and the default view shows the time and the (JSON) _source, loglevel is hidden within it and there are no filters at all (e.g. filter DEBUG and INFO logs).

Kibana’s default configuration is quite useless to me in my urgent need to analyse an error

The UI of course allows me to add those and more, but I did the exact same clicks every time I opened Kibana to analyse a certain behavior.

This certainly can all be solved…

Michael Kutz

I've been a software engineer since 2009, worked in various agile projects & got a taste for quality assurance. Today I'm a quality engineer at REWE digital.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store