Fix testRigCreate (wait for animations)

This commit is contained in:
David Taylor
2015-06-28 18:44:32 +01:00
parent e96b36e533
commit 65a8b43dbf

View File

@@ -4,6 +4,7 @@ from django.core import mail
from selenium import webdriver from selenium import webdriver
from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import StaleElementReferenceException from selenium.common.exceptions import StaleElementReferenceException
from selenium.webdriver.support.ui import WebDriverWait
from RIGS import models from RIGS import models
import re import re
import os import os
@@ -186,7 +187,12 @@ class EventTest(LiveServerTestCase):
# Gets redirected to login and back # Gets redirected to login and back
self.authenticate('/event/create/') self.authenticate('/event/create/')
# Check has slided up correctly - third save button hidden wait = WebDriverWait(self.browser, 10) #setup WebDriverWait to use later (to wait for animations)
self.browser.implicitly_wait(3) #Set session-long wait (only works for non-existant DOM objects)
wait.until(animation_is_finished())
# Check has slided up correctly - second save button hidden
save = self.browser.find_element_by_xpath( save = self.browser.find_element_by_xpath(
'(//button[@type="submit"])[3]') '(//button[@type="submit"])[3]')
self.assertFalse(save.is_displayed()) self.assertFalse(save.is_displayed())
@@ -205,7 +211,7 @@ class EventTest(LiveServerTestCase):
# See modal has opened # See modal has opened
modal = self.browser.find_element_by_id('modal') modal = self.browser.find_element_by_id('modal')
self.browser.implicitly_wait(3) wait.until(animation_is_finished())
self.assertTrue(modal.is_displayed()) self.assertTrue(modal.is_displayed())
self.assertIn("Add Person", modal.find_element_by_tag_name('h3').text) self.assertIn("Add Person", modal.find_element_by_tag_name('h3').text)
@@ -214,7 +220,7 @@ class EventTest(LiveServerTestCase):
'//div[@id="modal"]//input[@id="id_name"]').send_keys("Test Person 1") '//div[@id="modal"]//input[@id="id_name"]').send_keys("Test Person 1")
modal.find_element_by_xpath( modal.find_element_by_xpath(
'//div[@id="modal"]//input[@type="submit"]').click() '//div[@id="modal"]//input[@type="submit"]').click()
self.browser.implicitly_wait(3) wait.until(animation_is_finished())
self.assertFalse(modal.is_displayed()) self.assertFalse(modal.is_displayed())
# See new person selected # See new person selected
@@ -229,7 +235,7 @@ class EventTest(LiveServerTestCase):
# Change mind and add another # Change mind and add another
add_person_button.click() add_person_button.click()
self.browser.implicitly_wait(3) wait.until(animation_is_finished())
self.assertTrue(modal.is_displayed()) self.assertTrue(modal.is_displayed())
self.assertIn("Add Person", modal.find_element_by_tag_name('h3').text) self.assertIn("Add Person", modal.find_element_by_tag_name('h3').text)
@@ -237,7 +243,7 @@ class EventTest(LiveServerTestCase):
'//div[@id="modal"]//input[@id="id_name"]').send_keys("Test Person 2") '//div[@id="modal"]//input[@id="id_name"]').send_keys("Test Person 2")
modal.find_element_by_xpath( modal.find_element_by_xpath(
'//div[@id="modal"]//input[@type="submit"]').click() '//div[@id="modal"]//input[@type="submit"]').click()
self.browser.implicitly_wait(3) wait.until(animation_is_finished())
self.assertFalse(modal.is_displayed()) self.assertFalse(modal.is_displayed())
person2 = models.Person.objects.get(name="Test Person 2") person2 = models.Person.objects.get(name="Test Person 2")
@@ -265,7 +271,7 @@ class EventTest(LiveServerTestCase):
# Edit Person 1 to have a better name # Edit Person 1 to have a better name
form.find_element_by_xpath( form.find_element_by_xpath(
'//a[@data-target="#id_person" and contains(@href, "%s/edit/")]' % person1.pk).click() '//a[@data-target="#id_person" and contains(@href, "%s/edit/")]' % person1.pk).click()
self.browser.implicitly_wait(3) wait.until(animation_is_finished())
self.assertTrue(modal.is_displayed()) self.assertTrue(modal.is_displayed())
self.assertIn("Edit Person", modal.find_element_by_tag_name('h3').text) self.assertIn("Edit Person", modal.find_element_by_tag_name('h3').text)
name = modal.find_element_by_xpath( name = modal.find_element_by_xpath(
@@ -274,7 +280,9 @@ class EventTest(LiveServerTestCase):
name.clear() name.clear()
name.send_keys('Rig ' + person1.name) name.send_keys('Rig ' + person1.name)
name.send_keys(Keys.ENTER) name.send_keys(Keys.ENTER)
self.browser.implicitly_wait(3)
wait.until(animation_is_finished())
self.assertFalse(modal.is_displayed()) self.assertFalse(modal.is_displayed())
person1 = models.Person.objects.get(pk=person1.pk) person1 = models.Person.objects.get(pk=person1.pk)
self.assertEqual(person1.name, form.find_element_by_xpath( self.assertEqual(person1.name, form.find_element_by_xpath(
@@ -285,7 +293,7 @@ class EventTest(LiveServerTestCase):
'//a[@data-target="#id_organisation" and contains(@href, "add")]') '//a[@data-target="#id_organisation" and contains(@href, "add")]')
add_button.click() add_button.click()
modal = self.browser.find_element_by_id('modal') modal = self.browser.find_element_by_id('modal')
self.browser.implicitly_wait(3) wait.until(animation_is_finished())
self.assertTrue(modal.is_displayed()) self.assertTrue(modal.is_displayed())
self.assertIn("Add Organisation", modal.find_element_by_tag_name('h3').text) self.assertIn("Add Organisation", modal.find_element_by_tag_name('h3').text)
modal.find_element_by_xpath( modal.find_element_by_xpath(
@@ -294,7 +302,7 @@ class EventTest(LiveServerTestCase):
'//div[@id="modal"]//input[@type="submit"]').click() '//div[@id="modal"]//input[@type="submit"]').click()
# See it is selected # See it is selected
self.browser.implicitly_wait(3) wait.until(animation_is_finished())
self.assertFalse(modal.is_displayed()) self.assertFalse(modal.is_displayed())
obj = models.Organisation.objects.get(name="Test Organisation") obj = models.Organisation.objects.get(name="Test Organisation")
self.assertEqual(obj.name, form.find_element_by_xpath( self.assertEqual(obj.name, form.find_element_by_xpath(
@@ -309,7 +317,7 @@ class EventTest(LiveServerTestCase):
'//a[@data-target="#id_venue" and contains(@href, "add")]') '//a[@data-target="#id_venue" and contains(@href, "add")]')
add_button.click() add_button.click()
modal = self.browser.find_element_by_id('modal') modal = self.browser.find_element_by_id('modal')
self.browser.implicitly_wait(3) wait.until(animation_is_finished())
self.assertTrue(modal.is_displayed()) self.assertTrue(modal.is_displayed())
self.assertIn("Add Venue", modal.find_element_by_tag_name('h3').text) self.assertIn("Add Venue", modal.find_element_by_tag_name('h3').text)
modal.find_element_by_xpath( modal.find_element_by_xpath(
@@ -318,7 +326,7 @@ class EventTest(LiveServerTestCase):
'//div[@id="modal"]//input[@type="submit"]').click() '//div[@id="modal"]//input[@type="submit"]').click()
# See it is selected # See it is selected
self.browser.implicitly_wait(3) wait.until(animation_is_finished())
self.assertFalse(modal.is_displayed()) self.assertFalse(modal.is_displayed())
obj = models.Venue.objects.get(name="Test Venue") obj = models.Venue.objects.get(name="Test Venue")
self.assertEqual(obj.name, form.find_element_by_xpath( self.assertEqual(obj.name, form.find_element_by_xpath(
@@ -338,7 +346,7 @@ class EventTest(LiveServerTestCase):
# Add item # Add item
form.find_element_by_xpath('//button[contains(@class, "item-add")]').click() form.find_element_by_xpath('//button[contains(@class, "item-add")]').click()
self.browser.implicitly_wait(3) wait.until(animation_is_finished())
modal = self.browser.find_element_by_id("itemModal") modal = self.browser.find_element_by_id("itemModal")
modal.find_element_by_id("item_name").send_keys("Test Item 1") modal.find_element_by_id("item_name").send_keys("Test Item 1")
modal.find_element_by_id("item_description").send_keys("This is an item description\nthat for reasons unkown spans two lines") modal.find_element_by_id("item_description").send_keys("This is an item description\nthat for reasons unkown spans two lines")
@@ -450,3 +458,14 @@ class EventTest(LiveServerTestCase):
self.assertEqual(person.phone, personPanel.find_element_by_xpath('//dt[text()="Phone Number"]/following-sibling::dd[1]').text) self.assertEqual(person.phone, personPanel.find_element_by_xpath('//dt[text()="Phone Number"]/following-sibling::dd[1]').text)
organisationPanel = self.browser.find_element_by_xpath('//div[contains(text(), "Contact Details")]/..') organisationPanel = self.browser.find_element_by_xpath('//div[contains(text(), "Contact Details")]/..')
class animation_is_finished(object):
""" Checks if animation is done """
def __init__(self):
pass
def __call__(self, driver):
numberAnimating = driver.execute_script('return $(":animated").length')
finished = numberAnimating == 0
return finished