Selenium Server
New software release, selenium server, which expose a http server to which clients can connect using [`webdriver.Remote`](https://selenium-python.readthedocs.io/getting-started.html#using-selenium-with-remote-webdriver) and then use standard webdriver API to control the browser. The server is made of : * the "hub" to which webdriver connects * a Xvfb server * some nodes, for different browsers: * Firefox 52 * Firefox 60 * Chrome 69 * an IPv6 https frontend, exposing the admin interface and the hub. Note that python's webdriver binding before 3.14.0 refuse to connect to a hub with a non verified SSL certificate, so for now clients must either use the published `backend-url` (which is IPv4) or use a version of selenium eggs >= 3.14. In the future we'll see how [caucase](https://lab.nexedi.com/nexedi/caucase/) can solve this. Also, this behavior might also change with future version of selenium, because it's wrong that it does not verify SSL certificates. * a ssh server, to which you can connect to establish a ssh tunnel with port forward and register more nodes to the hub. This can be used to connect a browser running on your desktop and see the test running, run unsupported browsers, maybe also [appium](http://appium.io/docs/en/advanced-concepts/grid/) to run tests on mobile. This is a kind of "extra feature" that seems working, but I'm not sure we can support it. To achieve this, we had to : * update Xorg components and build gtk with a X11 gdk backend to be able to run firefox 60. Updating xorg/gdk also fixed a bug in firefox 52, before this, firefox 52 was not able to get the screen size and ` window.screen.width` was 0. Now firefox 52 can get the screen size properly but resizing window does not work. * update chrome 69 and fix a few missing `$LD_LIBRARY_PATH` in the wrapper. Everything seems working, including taking screenshots, uploading files and resizing window - except resizing window does not work on firefox 52. See the included test suite for some example usage. Basically it's same as what we're doing today, but instead of: ```python driver = webdriver.Firefox(path_to_firefox) ``` we use: ```python driver = webdriver.Remote( command_executor='http://127.0.0.1:4444/wd/hub', # the url or backend-url parameter published by the instance. desired_capabilities={ 'browserName': 'firefox', # or chrome 'version': '60', # or don't set a version if you want any version (browserName, on the other hand, is required) }) ``` /reviewed-on nexedi/slapos!420
Showing
Please register or sign in to comment