Pro Selenium doporučuji kouknout taky na webdriver-wrapper: https://horejsek.github.io/python-webdriverwrapper/
Když už tu jsou zmínky o Seleniu, tak bych si taky přihřál polívčičku projektem, na kterém jsem se podílel, když jsem ještě působil v jedné nejmenované firmě :). Vznikl jako konečné řešení testování jednoho produktu, který v té době neměl moc dobré API a prakticky veškerou funkcionalitu bylo potřeba otestovat přes UI. Původní "Javovský styl" Page Object Modelu přerostl přes hlavu a používat ho v Pythonu bylo otravné a věci typu BDD byly mimo, jelikož jsme v rámci testů potřebovali mít hromadu logiky a variae a lepit to v BDD by bylo za trest.
Je to https://github.com/RedHatQE/widgetastic.core .
Inspirován Django modely, v podstatě umožňuje rozkomponentizovat celé UI na nezávislé, znovupoužitelné, verzovatelné, děditelné a zanořitelné bloky včetně dynamicky řešeného opakování, které mapuje UI na seznam nebo asociativní pole, které jde s trochou důvtipu poskládat tak, že ta samá data, která člověk sype do API, může sypat do UI. Nejlépe se to kombinuje s knihovnou bývalého kolegy "navmazing, která zase umožňuje namapovat navigaci v UI na jednotlivé entity.
A obsahuje i poměrně chytrý stand-alone wrapper na Selenium browser, který řeší různé neduhy, některé věci optimalizuje a také zjednodušuje.
Má dvě objektivní nevýhody:
1. Rychlost - před každou akcí si kontroluje UI, jestli je ustálené. Byli jsme vyškoleni tím, co nám frontend byl schopen provést, takže žádné StaleElementException a podobné věci.
2. Netrivialita - je potřeba vědět, jak to uvnitř funguje, není to sice nic složitého, ale je potřeba si to nastudovat.