Commit f1c06315 authored by Léo-Paul Géneau's avatar Léo-Paul Géneau 👾

Seleniumserver: set slot quantity as an instance parameter

See merge request nexedi/slapos!1336
parents 553d2429 28f115bc
...@@ -56,6 +56,8 @@ install = ...@@ -56,6 +56,8 @@ install =
# FATAL:platform_font_linux.cc(83)] Check failed: InitDefaultFont(). Could not find the default font # FATAL:platform_font_linux.cc(83)] Check failed: InitDefaultFont(). Could not find the default font
export LD_LIBRARY_PATH=$d:%s export LD_LIBRARY_PATH=$d:%s
export PATH=%s:$PATH export PATH=%s:$PATH
# --disable-setuid-sandbox --no-sandbox --disable-gpu arguments are only required for chromium-wrapper-91
# they should be removed once we drop supporting this version
exec $d/chrome --disable-setuid-sandbox --no-sandbox --disable-gpu "$@" exec $d/chrome --disable-setuid-sandbox --no-sandbox --disable-gpu "$@"
""" % ( """ % (
part['location'], part['location'],
......
...@@ -15,8 +15,8 @@ ...@@ -15,8 +15,8 @@
[template] [template]
filename = instance.cfg.in filename = instance.cfg.in
md5sum = b443da6792bdde1218076a3a1ce50b11 md5sum = 58f6d112c90a23ae39f07a96fa5c8f1c
[template-selenium] [template-selenium]
filename = instance-selenium.cfg.in filename = instance-selenium.cfg.in
md5sum = 9bef75759623a660cfaf4b6f5a48a923 md5sum = 7d8bdc03f8feadc83d70f71df2ebb42d
\ No newline at end of file
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"description": "Parameters to request selenium instance",
"additionalProperties": false,
"properties": {
"ssh-authorized-key": {
"title": "SSH Key",
"description": "ssh public key",
"type": "string",
"default": ""
},
"slotQuantity": {
"title": "Slot quantity",
"description": "Number of slot per selenium node",
"type": "integer",
"default": 3
}
}
}
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"description": "Values returned by Selenium instanciation",
"properties": {
"backend-url": {
"description": "Selenium hub URL",
"type": "string"
},
"url": {
"description": "Selenium instance URL",
"type": "string"
},
"admin-url": {
"description": "Selenium admin URL",
"type": "string"
},
"ssh-url": {
"description": "Selenium ssh URL",
"type": "string"
},
"ssh-fingerprint": {
"description": "Selenium ssh key fingerprint",
"type": "string"
},
"run-node-command": {
"description": "Command to run a local Selenium node",
"type": "string"
}
}
}
{% set parameter_dict = dict(default_parameter_dict, **parameter_dict) -%}
[buildout] [buildout]
parts = parts =
monitor-base monitor-base
...@@ -54,7 +55,6 @@ command-line = ...@@ -54,7 +55,6 @@ command-line =
-host $${:hostname} -host $${:hostname}
-port $${:port} -port $${:port}
-role hub -role hub
-maxSession 20
-newSessionWaitTimeout 600000 -newSessionWaitTimeout 600000
--debug --debug
...@@ -82,6 +82,7 @@ command-line = ...@@ -82,6 +82,7 @@ command-line =
-host $${:hostname} -host $${:hostname}
-port $${:port} -port $${:port}
-role node -role node
-maxSession {{ parameter_dict['slotQuantity'] }}
-timeout 300 -timeout 300
-hub $${selenium-server-hub-instance:register-url} -hub $${selenium-server-hub-instance:register-url}
-capabilities $${:capabilities} -capabilities $${:capabilities}
...@@ -99,25 +100,25 @@ hostname = $${slap-configuration:ipv4-random} ...@@ -99,25 +100,25 @@ hostname = $${slap-configuration:ipv4-random}
[selenium-server-node-instance-firefox-102] [selenium-server-node-instance-firefox-102]
<= selenium-server-node-instance <= selenium-server-node-instance
capabilities = browserName=firefox,maxInstances=3,marionette=true,platform=LINUX,version=${firefox-102:version},firefox_binary=${firefox-wrapper-102:location} capabilities = browserName=firefox,maxInstances={{ parameter_dict['slotQuantity'] }},marionette=true,platform=LINUX,version=${firefox-102:version},firefox_binary=${firefox-wrapper-102:location}
java-args = -Dwebdriver.gecko.driver=${geckodriver-0.33.0:location} java-args = -Dwebdriver.gecko.driver=${geckodriver-0.33.0:location}
port = 7779 port = 7779
[selenium-server-node-instance-firefox-115] [selenium-server-node-instance-firefox-115]
<= selenium-server-node-instance <= selenium-server-node-instance
capabilities = browserName=firefox,maxInstances=3,marionette=true,platform=LINUX,version=${firefox-115:version},firefox_binary=${firefox-wrapper-115:location} capabilities = browserName=firefox,maxInstances={{ parameter_dict['slotQuantity'] }},marionette=true,platform=LINUX,version=${firefox-115:version},firefox_binary=${firefox-wrapper-115:location}
java-args = -Dwebdriver.gecko.driver=${geckodriver-0.33.0:location} java-args = -Dwebdriver.gecko.driver=${geckodriver-0.33.0:location}
port = 7780 port = 7780
[selenium-server-node-instance-chromium-91] [selenium-server-node-instance-chromium-91]
<= selenium-server-node-instance <= selenium-server-node-instance
capabilities = browserName=chrome,maxInstances=3,platform=LINUX,version=${chromium-91:version},chrome_binary=${chromium-wrapper-91:location} capabilities = browserName=chrome,maxInstances={{ parameter_dict['slotQuantity'] }},platform=LINUX,version=${chromium-91:version},chrome_binary=${chromium-wrapper-91:location}
java-args = -Dwebdriver.chrome.driver=${chromedriver-wrapper-91:location} java-args = -Dwebdriver.chrome.driver=${chromedriver-wrapper-91:location}
port = 7781 port = 7781
[selenium-server-node-instance-chromium-120] [selenium-server-node-instance-chromium-120]
<= selenium-server-node-instance <= selenium-server-node-instance
capabilities = browserName=chrome,maxInstances=3,platform=LINUX,version=${chromium-120:version},chrome_binary=${chromium-wrapper-120:location} capabilities = browserName=chrome,maxInstances={{ parameter_dict['slotQuantity'] }},platform=LINUX,version=${chromium-120:version},chrome_binary=${chromium-wrapper-120:location}
java-args = -Dwebdriver.chrome.driver=${chromedriver-wrapper-120:location} java-args = -Dwebdriver.chrome.driver=${chromedriver-wrapper-120:location}
port = 7782 port = 7782
...@@ -321,8 +322,8 @@ promise = check_command_execute ...@@ -321,8 +322,8 @@ promise = check_command_execute
name = $${:_buildout_section_name_}.py name = $${:_buildout_section_name_}.py
config-command = config-command =
$${selenium-server-check-nodes-registered:output} $${selenium-server-hub-instance:api-url} $${:expected-node-count} $${selenium-server-check-nodes-registered:output} $${selenium-server-hub-instance:api-url} $${:expected-node-count}
# We have 4 nodes with 3 slots each # We have 4 nodes with slotQuantity slots each
expected-node-count = 12 expected-node-count = {{ 4 * int(parameter_dict['slotQuantity']) }}
[selenium-server-check-nodes-registered] [selenium-server-check-nodes-registered]
recipe = slapos.recipe.template recipe = slapos.recipe.template
......
...@@ -12,7 +12,13 @@ url = ${template-selenium:output} ...@@ -12,7 +12,13 @@ url = ${template-selenium:output}
output = $${buildout:parts-directory}/$${:_buildout_section_name_}/$${:filename} output = $${buildout:parts-directory}/$${:_buildout_section_name_}/$${:filename}
filename = instance-selenium.cfg filename = instance-selenium.cfg
context = context =
jsonkey default_parameter_dict :default-parameters
key parameter_dict slap-configuration:configuration
key partition_ipv6 slap-configuration:ipv6-random key partition_ipv6 slap-configuration:ipv6-random
default-parameters =
{
"slotQuantity": 3
}
[switch-softwaretype] [switch-softwaretype]
recipe = slapos.cookbook:switch-softwaretype recipe = slapos.cookbook:switch-softwaretype
......
{
"name": "Selenium Server",
"description": "Selenium server running chromium and firefox nodes",
"serialisation": "xml",
"software-type": {
"default": {
"title": "Default",
"software-type": "default",
"description": "Request a selenium server",
"request": "instance-input-schema.json",
"response": "instance-output-schema.json",
"index": 0
}
}
}
...@@ -45,7 +45,6 @@ import requests ...@@ -45,7 +45,6 @@ import requests
from PIL import Image from PIL import Image
from selenium import webdriver from selenium import webdriver
from selenium.webdriver.common.by import By from selenium.webdriver.common.by import By
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.remote.remote_connection import RemoteConnection from selenium.webdriver.remote.remote_connection import RemoteConnection
from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support.ui import WebDriverWait
...@@ -252,7 +251,7 @@ class TestBrowserSelection(WebServerMixin, SeleniumServerTestCase): ...@@ -252,7 +251,7 @@ class TestBrowserSelection(WebServerMixin, SeleniumServerTestCase):
driver = webdriver.Remote( driver = webdriver.Remote(
command_executor=webdriver_url, command_executor=webdriver_url,
desired_capabilities=DesiredCapabilities.CHROME) desired_capabilities=webdriver.ChromeOptions().to_capabilities())
driver.get(self.server_url) driver.get(self.server_url)
self.assertEqual('Test page', driver.title) self.assertEqual('Test page', driver.title)
...@@ -268,7 +267,7 @@ class TestBrowserSelection(WebServerMixin, SeleniumServerTestCase): ...@@ -268,7 +267,7 @@ class TestBrowserSelection(WebServerMixin, SeleniumServerTestCase):
driver = webdriver.Remote( driver = webdriver.Remote(
command_executor=webdriver_url, command_executor=webdriver_url,
desired_capabilities=DesiredCapabilities.FIREFOX) desired_capabilities=webdriver.FirefoxOptions().to_capabilities())
driver.get(self.server_url) driver.get(self.server_url)
self.assertEqual('Test page', driver.title) self.assertEqual('Test page', driver.title)
...@@ -281,7 +280,7 @@ class TestBrowserSelection(WebServerMixin, SeleniumServerTestCase): ...@@ -281,7 +280,7 @@ class TestBrowserSelection(WebServerMixin, SeleniumServerTestCase):
parameter_dict = self.computer_partition.getConnectionParameterDict() parameter_dict = self.computer_partition.getConnectionParameterDict()
webdriver_url = parameter_dict['backend-url'] webdriver_url = parameter_dict['backend-url']
desired_capabilities = DesiredCapabilities.FIREFOX.copy() desired_capabilities = webdriver.FirefoxOptions().to_capabilities()
desired_capabilities['version'] = '102.15.1esr' desired_capabilities['version'] = '102.15.1esr'
driver = webdriver.Remote( driver = webdriver.Remote(
command_executor=webdriver_url, command_executor=webdriver_url,
...@@ -339,7 +338,7 @@ class TestFrontend(WebServerMixin, SeleniumServerTestCase): ...@@ -339,7 +338,7 @@ class TestFrontend(WebServerMixin, SeleniumServerTestCase):
driver = webdriver.Remote( driver = webdriver.Remote(
command_executor=executor, command_executor=executor,
desired_capabilities=DesiredCapabilities.CHROME) desired_capabilities=webdriver.ChromeOptions().to_capabilities())
driver.get(self.server_url) driver.get(self.server_url)
self.assertEqual('Test page', driver.title) self.assertEqual('Test page', driver.title)
...@@ -414,7 +413,8 @@ class TestFirefox102( ...@@ -414,7 +413,8 @@ class TestFirefox102(
SeleniumServerTestCase, SeleniumServerTestCase,
ImageComparisonTestCase, ImageComparisonTestCase,
): ):
desired_capabilities = dict(DesiredCapabilities.FIREFOX, version='102.15.1esr') desired_capabilities = dict(webdriver.FirefoxOptions().to_capabilities(),
version='102.15.1esr')
user_agent = 'Gecko/20100101 Firefox/102.0' user_agent = 'Gecko/20100101 Firefox/102.0'
def test_resize_window(self): def test_resize_window(self):
...@@ -426,7 +426,8 @@ class TestFirefox115( ...@@ -426,7 +426,8 @@ class TestFirefox115(
SeleniumServerTestCase, SeleniumServerTestCase,
ImageComparisonTestCase, ImageComparisonTestCase,
): ):
desired_capabilities = dict(DesiredCapabilities.FIREFOX, version='115.3.1esr') desired_capabilities = dict(webdriver.FirefoxOptions().to_capabilities(),
version='115.3.1esr')
user_agent = 'Gecko/20100101 Firefox/115.0' user_agent = 'Gecko/20100101 Firefox/115.0'
def test_resize_window(self): def test_resize_window(self):
...@@ -438,7 +439,8 @@ class TestChrome91( ...@@ -438,7 +439,8 @@ class TestChrome91(
SeleniumServerTestCase, SeleniumServerTestCase,
ImageComparisonTestCase, ImageComparisonTestCase,
): ):
desired_capabilities = dict(DesiredCapabilities.CHROME, version='91.0.4472.114') desired_capabilities = dict(webdriver.ChromeOptions().to_capabilities(),
version='91.0.4472.114')
user_agent = 'Chrome/91.0.4472.0' user_agent = 'Chrome/91.0.4472.0'
...@@ -447,5 +449,6 @@ class TestChrome120( ...@@ -447,5 +449,6 @@ class TestChrome120(
SeleniumServerTestCase, SeleniumServerTestCase,
ImageComparisonTestCase, ImageComparisonTestCase,
): ):
desired_capabilities = dict(DesiredCapabilities.CHROME, version='120.0.6099.109') desired_capabilities = dict(webdriver.ChromeOptions().to_capabilities(),
version='120.0.6099.109')
user_agent = 'Chrome/120.0.0.0' user_agent = 'Chrome/120.0.0.0'
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment