testinfra: refactor screenshot taking
Reduce the screenshots to a single utility function to avoid copying a lot of boilerplate. Change-Id: Iad1c7afa4e9ea9a4ddaca5e62751795e60bc2980
This commit is contained in:
parent
1dde7628e8
commit
9ba398dee9
@ -12,11 +12,10 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from selenium import webdriver
|
|
||||||
from selenium.webdriver.support.ui import WebDriverWait
|
|
||||||
from selenium.common.exceptions import TimeoutException
|
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
from util import take_screenshots
|
||||||
|
|
||||||
testinfra_hosts = [
|
testinfra_hosts = [
|
||||||
'review02.opendev.org',
|
'review02.opendev.org',
|
||||||
]
|
]
|
||||||
@ -33,46 +32,21 @@ def test_gerrit_x_project_clone(host):
|
|||||||
assert cmd.succeeded
|
assert cmd.succeeded
|
||||||
|
|
||||||
def test_gerrit_screenshot(host):
|
def test_gerrit_screenshot(host):
|
||||||
driver = webdriver.Remote(
|
|
||||||
command_executor='http://%s:4444/wd/hub' % (host.backend.get_hostname()),
|
|
||||||
desired_capabilities=webdriver.DesiredCapabilities.FIREFOX)
|
|
||||||
|
|
||||||
try:
|
# Click the gerrit results tab into view
|
||||||
driver.get("http://localhost:8081")
|
script = ("document.querySelector('gr-app').shadowRoot"
|
||||||
WebDriverWait(driver, 30).until(lambda driver: driver.execute_script(
|
".querySelector('gr-app-element').shadowRoot"
|
||||||
'return document.readyState') == 'complete')
|
".querySelector('main')"
|
||||||
# NOTE(ianw): The page doesn't really seem to be complete at
|
".querySelector('gr-change-view').shadowRoot"
|
||||||
# this point, not sure what to listen for...
|
".querySelector('paper-tab[data-name=\"change-view-tab-header-zuul-results-summary\"]')"
|
||||||
time.sleep(5)
|
".click()")
|
||||||
driver.save_screenshot("/var/log/screenshots/gerrit-main-page.png")
|
|
||||||
|
|
||||||
for change in (1, 2):
|
shots = (
|
||||||
driver.get("http://localhost:8081/c/x/test-project/+/%s" % change)
|
('http://localhost:8081', None, 'gerrit-main-page.png'),
|
||||||
time.sleep(5)
|
('http://localhost:8081/c/x/test-project/+/1', script,
|
||||||
driver.execute_script(
|
'gerrit-change-page-1.png'),
|
||||||
"document.querySelector('gr-app').shadowRoot"
|
('http://localhost:8081/c/x/test-project/+/2', script,
|
||||||
".querySelector('gr-app-element').shadowRoot"
|
'gerrit-change-page-2.png')
|
||||||
".querySelector('main')"
|
)
|
||||||
".querySelector('gr-change-view').shadowRoot"
|
|
||||||
".querySelector('paper-tab[data-name=\"change-view-tab-header-zuul-results-summary\"]')"
|
|
||||||
".click()"
|
|
||||||
)
|
|
||||||
time.sleep(5)
|
|
||||||
|
|
||||||
original_size = driver.get_window_size()
|
take_screenshots(host, shots)
|
||||||
required_width = driver.execute_script(
|
|
||||||
'return document.body.parentNode.scrollWidth')
|
|
||||||
required_height = driver.execute_script(
|
|
||||||
'return document.body.parentNode.scrollHeight') + 100
|
|
||||||
driver.set_window_size(required_width, required_height)
|
|
||||||
|
|
||||||
driver.find_element_by_tag_name('body'). \
|
|
||||||
screenshot("/var/log/screenshots/gerrit-change-page-%s.png" % change)
|
|
||||||
|
|
||||||
driver.set_window_size(
|
|
||||||
original_size['width'], original_size['height'])
|
|
||||||
|
|
||||||
except TimeoutException as e:
|
|
||||||
raise e
|
|
||||||
finally:
|
|
||||||
driver.quit()
|
|
||||||
|
@ -12,11 +12,7 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
import time
|
from util import take_screenshots
|
||||||
|
|
||||||
from selenium import webdriver
|
|
||||||
from selenium.webdriver.support.ui import WebDriverWait
|
|
||||||
from selenium.common.exceptions import TimeoutException
|
|
||||||
|
|
||||||
testinfra_hosts = ['gitea99.opendev.org']
|
testinfra_hosts = ['gitea99.opendev.org']
|
||||||
|
|
||||||
@ -91,46 +87,13 @@ def test_project_clone(host):
|
|||||||
assert cmd.succeeded
|
assert cmd.succeeded
|
||||||
|
|
||||||
def test_gitea_screenshots(host):
|
def test_gitea_screenshots(host):
|
||||||
driver = webdriver.Remote(
|
|
||||||
command_executor='http://%s:4444/wd/hub' % (host.backend.get_hostname()),
|
|
||||||
desired_capabilities=webdriver.DesiredCapabilities.FIREFOX)
|
|
||||||
|
|
||||||
shots = (
|
shots = (
|
||||||
('https://localhost:3081', 'gitea-main.png'),
|
('https://localhost:3081', None, 'gitea-main.png'),
|
||||||
('https://localhost:3081/opendev/system-config',
|
('https://localhost:3081/opendev/system-config', None,
|
||||||
'gitea-project-system-config.png'),
|
'gitea-project-system-config.png'),
|
||||||
('https://localhost:3081/opendev/disk-image-builder',
|
('https://localhost:3081/opendev/disk-image-builder', None,
|
||||||
'gitea-project-dib.png')
|
'gitea-project-dib.png')
|
||||||
)
|
)
|
||||||
try:
|
|
||||||
for url, png in shots:
|
|
||||||
driver.get(url)
|
|
||||||
WebDriverWait(driver, 30).until(
|
|
||||||
lambda driver: driver.execute_script(
|
|
||||||
'return document.readyState') == 'complete')
|
|
||||||
time.sleep(5)
|
|
||||||
# NOTE(ianw) This is a mash-up of things I found on
|
|
||||||
# stackoverflow and other bits googling "full size
|
|
||||||
# screenshot". You expand the viewport and take a
|
|
||||||
# shot of the <body> element so that you don't also
|
|
||||||
# get scrollbars in the shot, with some tweaking
|
|
||||||
# because the window size. Apparently selinum 4
|
|
||||||
# will have getFullPageScreeshotAs, so we should switch
|
|
||||||
# to that when available.
|
|
||||||
original_size = driver.get_window_size()
|
|
||||||
required_width = driver.execute_script(
|
|
||||||
'return document.body.parentNode.scrollWidth')
|
|
||||||
required_height = driver.execute_script(
|
|
||||||
'return document.body.parentNode.scrollHeight') + 100
|
|
||||||
driver.set_window_size(required_width, required_height)
|
|
||||||
|
|
||||||
driver.find_element_by_tag_name('body'). \
|
take_screenshots(host, shots)
|
||||||
screenshot("/var/log/screenshots/%s" % png)
|
|
||||||
|
|
||||||
driver.set_window_size(
|
|
||||||
original_size['width'], original_size['height'])
|
|
||||||
|
|
||||||
except TimeoutException as e:
|
|
||||||
raise e
|
|
||||||
finally:
|
|
||||||
driver.quit()
|
|
||||||
|
@ -12,11 +12,7 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from selenium import webdriver
|
from util import take_screenshots
|
||||||
from selenium.webdriver.support.ui import WebDriverWait
|
|
||||||
from selenium.common.exceptions import TimeoutException
|
|
||||||
import time
|
|
||||||
|
|
||||||
|
|
||||||
testinfra_hosts = ['grafana01.opendev.org']
|
testinfra_hosts = ['grafana01.opendev.org']
|
||||||
|
|
||||||
@ -41,32 +37,8 @@ def test_grafana_api_denial(host):
|
|||||||
assert '403 Forbidden' in cmd.stdout
|
assert '403 Forbidden' in cmd.stdout
|
||||||
|
|
||||||
def test_grafana_screenshots(host):
|
def test_grafana_screenshots(host):
|
||||||
driver = webdriver.Remote(
|
shots = (
|
||||||
command_executor='http://%s:4444/wd/hub' % (host.backend.get_hostname()),
|
('https://localhost/', None, 'grafana-main-page.png'),
|
||||||
desired_capabilities=webdriver.DesiredCapabilities.FIREFOX)
|
('https://localhost/dashboards', None, 'grafana-dashboards-page.png')
|
||||||
|
)
|
||||||
try:
|
take_screenshots(host, shots)
|
||||||
driver.get("https://localhost")
|
|
||||||
WebDriverWait(driver, 30).until(lambda driver: driver.execute_script(
|
|
||||||
'return document.readyState') == 'complete')
|
|
||||||
# NOTE(ianw): The page doesn't really seem to be complete at
|
|
||||||
# this point, not sure what to listen for...
|
|
||||||
time.sleep(5)
|
|
||||||
driver.save_screenshot("/var/log/screenshots/grafana-main-page.png")
|
|
||||||
|
|
||||||
driver.get("https://localhost/dashboards")
|
|
||||||
original_size = driver.get_window_size()
|
|
||||||
required_width = driver.execute_script(
|
|
||||||
'return document.body.parentNode.scrollWidth')
|
|
||||||
required_height = driver.execute_script(
|
|
||||||
'return document.body.parentNode.scrollHeight') + 100
|
|
||||||
driver.set_window_size(required_width, required_height)
|
|
||||||
driver.find_element_by_tag_name('body'). \
|
|
||||||
screenshot("/var/log/screenshots/grafana-dashboards-page.png")
|
|
||||||
driver.set_window_size(
|
|
||||||
original_size['width'], original_size['height'])
|
|
||||||
|
|
||||||
except TimeoutException as e:
|
|
||||||
raise e
|
|
||||||
finally:
|
|
||||||
driver.quit()
|
|
||||||
|
@ -13,10 +13,8 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
from selenium import webdriver
|
|
||||||
from selenium.webdriver.support.ui import WebDriverWait
|
from util import take_screenshots
|
||||||
from selenium.common.exceptions import TimeoutException
|
|
||||||
import time
|
|
||||||
|
|
||||||
testinfra_hosts = ['paste01.opendev.org']
|
testinfra_hosts = ['paste01.opendev.org']
|
||||||
|
|
||||||
@ -54,18 +52,8 @@ def test_paste_robots(host):
|
|||||||
assert 'Disallow: /' in cmd.stdout
|
assert 'Disallow: /' in cmd.stdout
|
||||||
|
|
||||||
def test_paste_screenshots(host):
|
def test_paste_screenshots(host):
|
||||||
driver = webdriver.Remote(
|
shots = (
|
||||||
command_executor='http://%s:4444/wd/hub' % (host.backend.get_hostname()),
|
('https://localhost', None, 'paste-main-page.png'),
|
||||||
desired_capabilities=webdriver.DesiredCapabilities.FIREFOX)
|
)
|
||||||
|
|
||||||
try:
|
take_screenshots(host, shots)
|
||||||
driver.get("https://localhost")
|
|
||||||
WebDriverWait(driver, 30).until(lambda driver: driver.execute_script(
|
|
||||||
'return document.readyState') == 'complete')
|
|
||||||
time.sleep(5)
|
|
||||||
driver.save_screenshot("/var/log/screenshots/paste-main-page.png")
|
|
||||||
|
|
||||||
except TimeoutException as e:
|
|
||||||
raise e
|
|
||||||
finally:
|
|
||||||
driver.quit()
|
|
||||||
|
@ -13,6 +13,67 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
import socket
|
import socket
|
||||||
|
import time
|
||||||
|
|
||||||
|
from selenium import webdriver
|
||||||
|
from selenium.webdriver.support.ui import WebDriverWait
|
||||||
|
from selenium.common.exceptions import TimeoutException
|
||||||
|
|
||||||
|
def take_screenshots(host, shots):
|
||||||
|
"""Take screenshots
|
||||||
|
|
||||||
|
host: the testinfra host info of the remote host where selenium is
|
||||||
|
running
|
||||||
|
shots: a list where each element is a list consisting of
|
||||||
|
|
||||||
|
* (str) URL to screenshot
|
||||||
|
* (str) Javascript to execute before shot, None to skip
|
||||||
|
* (str) filename.png, will be placed in /var/log/screenshots for collection
|
||||||
|
"""
|
||||||
|
driver = webdriver.Remote(
|
||||||
|
command_executor='http://%s:4444/wd/hub' % (host.backend.get_hostname()),
|
||||||
|
desired_capabilities=webdriver.DesiredCapabilities.FIREFOX)
|
||||||
|
|
||||||
|
try:
|
||||||
|
for url, execute, png in shots:
|
||||||
|
driver.get(url)
|
||||||
|
WebDriverWait(driver, 30).until(
|
||||||
|
lambda driver: driver.execute_script(
|
||||||
|
'return document.readyState') == 'complete')
|
||||||
|
|
||||||
|
if execute:
|
||||||
|
time.sleep(5)
|
||||||
|
driver.execute_script(execute)
|
||||||
|
|
||||||
|
time.sleep(5)
|
||||||
|
|
||||||
|
# NOTE(ianw) This is a mash-up of things I found on
|
||||||
|
# stackoverflow and other bits googling "full size
|
||||||
|
# screenshot". You expand the viewport and take a
|
||||||
|
# shot of the <body> element so that you don't also
|
||||||
|
# get scrollbars in the shot, with some tweaking
|
||||||
|
# because the window size. Apparently selinum 4
|
||||||
|
# will have getFullPageScreeshotAs, so we should switch
|
||||||
|
# to that when available.
|
||||||
|
original_size = driver.get_window_size()
|
||||||
|
required_width = driver.execute_script(
|
||||||
|
'return document.body.parentNode.scrollWidth')
|
||||||
|
required_height = driver.execute_script(
|
||||||
|
'return document.body.parentNode.scrollHeight') + 100
|
||||||
|
driver.set_window_size(required_width, required_height)
|
||||||
|
|
||||||
|
driver.find_element_by_tag_name('body'). \
|
||||||
|
screenshot("/var/log/screenshots/%s" % png)
|
||||||
|
|
||||||
|
driver.set_window_size(
|
||||||
|
original_size['width'], original_size['height'])
|
||||||
|
|
||||||
|
except TimeoutException as e:
|
||||||
|
raise e
|
||||||
|
finally:
|
||||||
|
driver.quit()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def get_ips(value, family=None):
|
def get_ips(value, family=None):
|
||||||
ret = set()
|
ret = set()
|
||||||
|
Loading…
Reference in New Issue
Block a user