Which platforms does Helium support?

Helium is currently available for Windows (all major versions), OSX and Linux as a Python and Java library. On top of that, there is also a standalone version (interactive console application) available for Windows.


Do you offer a graphical development environment for writing and running scripts? Will you provide something like this at some point?

Helium does not include a graphical development environment of its own but can be used with any IDE that supports the Python or Java programming language. Many such IDEs exist - we recommend PyCharm (commercial) or the free Eclipse-based PyDev for Python and IntelliJ IDEA (commercial) or free Eclipse for Java. All the mentioned IDEs feature syntax highlighting, code completion, a graphical debugger, refactoring capabilities etc.

There are several reasons why we do not provide a graphical IDE of our own. One is that it would be very difficult to build a tool to the same level of sophistication and stability as existing IDEs. Another is that such a proprietary tool would require potentially expensive training on the part of our users. Finally, our users appreciate the minimal dependence they have on us as a tool vendor as a result of this lightweight approach.

The detailed instructions about setting up IDEs to work with Helium can be found here.


Suppose we have two links with the same name on a webpage. Then how can we tell Helium to click a specific link?

Helium has the capability to search for the nearest elements to the element it last interacted with and always takes the closest element in case of ambiguity. If you want to explicitly tell which link to click on, then the find_all(..) findAll(..) function is useful. For example, imagine there are multiple "Download" links on a website. In such case to select the desired link, you can do the following:

List<Link> downloadLinks = findAll(Link("Download"));
// sort the links descending based on their y-position
// on the website
Collections.sort(downloadLinks, new Comparator<Link>() {
    @Override
    public int compare(final Link lhs, Link rhs) {
        if (lhs.getY() < rhs.getY()) {
            return 1;
        }
        if (lhs.getY() > rhs.getY()) {
            return -1;
        }
        return 0;
    }
});
// click on the link which is below all the other links
// (in the bottom of the website)
click(downloadLinks.get(0));
download_links = find_all(Link("Download"))
# sort the links descending based on their y-position on the website
# and get the Download link which is below all the other links
# (in the bottom of the page) and click on it
bottom_download_link = sorted(
    download_links, key=lambda link: link.y, reverse=True
)[0]
click(bottom_download_link)