• +43 660 1453541
  • contact@germaniumhq.com

Germanium 1.9.3 is Released




Germanium 1.9.3 is Released

A lot of things changed since the 1.9.0 release. Beside a lot of bugfixes, functionally, these would be the highlights:

  1. use_window, and the Window selector. It is possible now not only to switch to windows by their given title, but also wait for them to open, like with everything else in Germanium:

    1
    2
    3
    4
    5
    6
    7
    click('#open-login-window')
    wait(Window('Login Dialog'))
    use_window('Login Dialog')
    # we switched to the Login window, so we can use
    # now regular Germanium APIs
    type_keys('....', Input('username'))
    ..
  2. containing_all and containing work really well, and searches happen in the context of the current element. For example to find all the tables that have at least three rows:

    1
    2
    3
    Element("table")\
    .containing(Element("tr", index=3))\
    .element_list()
  3. Point support. Two new classes were added: Box, and Point, and all the mouse operations (click, right_click, drag_and_drop…) allow also points instead of selectors.

    The Box class receives a selector as an argument, and can fetch points from the element that is matched, allowing also to do simple math on the points. For example to do a click on a canvas element, from its top left + 10,10 px, and to release it on its bottom right - 10,10 px, someone would write:

    1
    2
    3
    canvas_box=Box("canvas")
    drag_and_drop(canvas_box.top_left(10, 10),
    canvas_box.bottom_right(-10, -10))

    Clicking also works outside element bounds, for example:

    1
    click(Box("img").middle_right(2)

    will click 2 pixels to the right of the matched <img> element.

If you have any issues/feature requests, please don’t hesitate to open an issue on the GitHub project page.

Hope you’ll enjoy it.