Skip to content
Merged
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions openwisp_controller/config/tests/test_selenium.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
TimeoutException,
UnexpectedAlertPresentException,
)
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.alert import Alert
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import Select, WebDriverWait

Expand Down Expand Up @@ -130,6 +132,48 @@ def test_create_new_device(self):
'The Device “11:22:33:44:55:66” was added successfully.',
)

def test_device_preview_keyboard_shortcuts(self):
self._create_config(device=self._create_device(name='Test'))
self.login()
self.open(reverse('admin:config_device_changelist'))

# open first device in the list
self.web_driver.find_element(
by=By.CSS_SELECTOR, value='tbody tr:nth-child(1) th a'
).click()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This can be shortened by directly opening the device page.

Suggested change
self._create_config(device=self._create_device(name='Test'))
self.login()
self.open(reverse('admin:config_device_changelist'))
# open first device in the list
self.web_driver.find_element(
by=By.CSS_SELECTOR, value='tbody tr:nth-child(1) th a'
).click()
device = self._create_config(device=self._create_device(name='Test')).device
self.login()
self.open(reverse('admin:config_device_change', args=[device.id]))

try:
WebDriverWait(self.web_driver, 2).until(
EC.presence_of_element_located((By.CSS_SELECTOR, '#content-main'))
)
except TimeoutException:
self.fail('Device detail page did not load in time')
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


with self.subTest('press ALT + P and expect overlay to be shown'):
actions = ActionChains(self.web_driver)
actions.key_down(Keys.ALT).send_keys('p').key_up(Keys.ALT).perform()
try:
WebDriverWait(self.web_driver, 2).until(
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess we can change this to 1 as it's a fast operation.

Suggested change
WebDriverWait(self.web_driver, 2).until(
WebDriverWait(self.web_driver, 1).until(

lambda driver: driver.find_element(
By.CSS_SELECTOR, '.djnjc-overlay:not(.loading)'
).value_of_css_property('display')
!= 'none'
)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's use EC.visibility_of_element_located

Suggested change
WebDriverWait(self.web_driver, 2).until(
lambda driver: driver.find_element(
By.CSS_SELECTOR, '.djnjc-overlay:not(.loading)'
).value_of_css_property('display')
!= 'none'
)
WebDriverWait(self.web_driver, 2).until(
EC.visibility_of_element_located(
(By.CSS_SELECTOR, '.djnjc-overlay:not(.loading)')
)
)

except TimeoutException:
self.fail('The preview overlay is unexpectedly not visible')

with self.subTest('press ESC to close preview overlay'):
actions = ActionChains(self.web_driver)
actions.send_keys(Keys.ESCAPE).perform()
try:
WebDriverWait(self.web_driver, 2).until(
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
WebDriverWait(self.web_driver, 2).until(
WebDriverWait(self.web_driver, 1).until(

lambda driver: driver.find_element(
By.CSS_SELECTOR, '.djnjc-overlay:not(.loading)'
).value_of_css_property('display')
== 'none'
)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similarly, this can be changed to use EC.invisibility_of_element_located

Suggested change
WebDriverWait(self.web_driver, 2).until(
lambda driver: driver.find_element(
By.CSS_SELECTOR, '.djnjc-overlay:not(.loading)'
).value_of_css_property('display')
== 'none'
)
WebDriverWait(self.web_driver, 2).until(
EC.invisibility_of_element_located(
(By.CSS_SELECTOR, '.djnjc-overlay:not(.loading)')
)
)

except TimeoutException:
self.fail('The preview overlay has not been closed as expected')

def test_unsaved_changes(self):
self.login()
device = self._create_config(organization=self._get_org()).device
Expand Down
Loading