More automation of Selenium tests
authorCharles Connell <charles@connells.org>
Tue, 17 Dec 2013 05:06:27 +0000 (00:06 -0500)
committerCharles Connell <charles@connells.org>
Tue, 17 Dec 2013 05:06:27 +0000 (00:06 -0500)
karmaworld/apps/courses/test/selenium.py [deleted file]
karmaworld/apps/courses/test/test.py
karmaworld/apps/courses/test/test_selenium.py [new file with mode: 0644]

diff --git a/karmaworld/apps/courses/test/selenium.py b/karmaworld/apps/courses/test/selenium.py
deleted file mode 100644 (file)
index 55c320b..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-from selenium import webdriver
-from selenium.webdriver.support.wait import WebDriverWait
-from selenium.webdriver.common.by import By
-from selenium.webdriver.common.keys import Keys
-from selenium.webdriver.support import expected_conditions as EC
-import uuid
-import unittest
-
-
-class AddCourseTest(unittest.TestCase):
-    """Tests the Add Course form. Requires a copy of KarmaNotes
-    be available at localhost:8000. This will modify your database."""
-
-    def setUp(self):
-        self.driver = webdriver.Firefox()
-        self.driver.implicitly_wait(3)
-        self.wait = WebDriverWait(self.driver, 10)
-
-    def tearDown(self):
-        self.driver.close()
-
-    def selectAutocomplete(self, inputId, keys, fieldIndex):
-        input = self.driver.find_element_by_id(inputId)
-        input.send_keys(keys)
-        self.wait.until(EC.element_to_be_clickable((By.XPATH, "//ul[contains(@class,'ui-autocomplete')][" + str(fieldIndex) + "]/li")))
-        input.send_keys(Keys.DOWN)
-        autocompleteMenuItem = self.driver.find_element_by_id("ui-active-menuitem")
-        autocompleteMenuItem.click()
-
-    def testSchoolName(self):
-        self.driver.get("http://localhost:8000/")
-
-        # Click "Add Course"
-        addCourseButton = self.driver.find_element_by_id("add-course-btn")
-        addCourseButton.click()
-
-        # Scroll down so the autocomplete menu is in view
-        # This works around some weird failures
-        self.driver.execute_script("javascript:window.scrollBy(0,200)")
-
-        # Type in part of a school name
-        schoolInput = self.driver.find_element_by_id("str_school")
-        schoolInput.send_keys("harvard u")
-
-        # Wait for autocomplete menu to appear
-        self.wait.until(EC.element_to_be_clickable((By.XPATH, "//ul[contains(@class,'ui-autocomplete')][1]/li")))
-
-        # Choose the first suggestion
-        schoolInput.send_keys(Keys.DOWN)
-        activeItem = self.driver.find_element_by_id("ui-active-menuitem")
-        activeItem.click()
-
-        self.assertEqual(schoolInput.get_attribute("value"), "Harvard University")
-
-        schoolId = self.driver.find_element_by_id("id_school")
-        self.assertEqual(schoolId.get_attribute("value"), "1817")
-
-    def testCreateCourse(self):
-        self.driver.get("http://localhost:8000/")
-
-        # Click "Add Course"
-        addCourseButton = self.driver.find_element_by_id("add-course-btn")
-        addCourseButton.click()
-        self.driver.execute_script("javascript:window.scrollBy(0,200)")
-
-        # We shouldn't be able to save it yet
-        saveButton = self.driver.find_element_by_id("save-btn")
-        self.assertIn("disabled", saveButton.get_attribute("class"))
-
-        # Choose a school
-        self.selectAutocomplete("str_school", "northeastern u", 1)
-
-        # Check that save button is now enabled
-        self.assertNotIn("disabled", saveButton.get_attribute("class"))
-
-        # Course name
-        newCourseName = "SELENIUM TEST COURSE " + uuid.uuid4().hex
-        courseNameInput = self.driver.find_element_by_id("id_name")
-        courseNameInput.send_keys(newCourseName)
-
-        # Instructor name
-        newInstructorName = "SELENIUM TEST INSTRUCTOR " + uuid.uuid4().hex
-        instructorNameInput = self.driver.find_element_by_id("id_instructor_name")
-        instructorNameInput.send_keys(newInstructorName)
-
-        # Click "Save"
-        saveButton = self.driver.find_element_by_id("save-btn")
-        saveButton.click()
-
-        # See if we are taken to the new course page
-        self.wait.until(EC.title_contains(newCourseName))
-
-
-    def testCreateExistingCourse(self):
-        self.driver.get("http://localhost:8000/")
-
-        # Click "Add Course"
-        addCourseButton = self.driver.find_element_by_id("add-course-btn")
-        addCourseButton.click()
-        self.driver.execute_script("javascript:window.scrollBy(0,200)")
-
-        # We shouldn't be able to save it yet
-        saveButton = self.driver.find_element_by_id("save-btn")
-        self.assertIn("disabled", saveButton.get_attribute("class"))
-
-        # Choose a school
-        self.selectAutocomplete("str_school", "northeastern u", 1)
-
-        # Check that save button is now enabled
-        self.assertNotIn("disabled", saveButton.get_attribute("class"))
-
-        # Course name
-        newCourseName = "SELENIUM TEST COURSE " + uuid.uuid4().hex
-        courseNameInput = self.driver.find_element_by_id("id_name")
-        courseNameInput.send_keys(newCourseName)
-
-        # Instructor name
-        newInstructorName = "SELENIUM TEST INSTRUCTOR " + uuid.uuid4().hex
-        instructorNameInput = self.driver.find_element_by_id("id_instructor_name")
-        instructorNameInput.send_keys(newInstructorName)
-
-        # Click "Save"
-        saveButton = self.driver.find_element_by_id("save-btn")
-        saveButton.click()
-
-        # See if we are taken to the new course page
-        self.wait.until(EC.title_contains(newCourseName))
-
-        # Now go back to the home page
-        self.driver.get("http://localhost:8000/")
-
-        # Click "Add Course"
-        addCourseButton = self.driver.find_element_by_id("add-course-btn")
-        addCourseButton.click()
-        self.driver.execute_script("javascript:window.scrollBy(0,200)")
-
-        # Choose the SAME school
-        self.selectAutocomplete("str_school", "northeastern u", 1)
-
-        # The SAME course name
-        self.selectAutocomplete("id_name", newCourseName, 2)
-
-        # The SAME instructor name
-        self.selectAutocomplete("id_instructor_name", newInstructorName, 3)
-
-        # Make sure Save button is disabled and hidden
-        saveButton = self.driver.find_element_by_id("save-btn")
-        self.assertIn("disabled", saveButton.get_attribute("class"))
-        self.wait.until_not(EC.visibility_of(saveButton))
-
-        # Make sure Existing Course link is shown
-        existingCourse = self.driver.find_element_by_id("existing-course-btn")
-        self.wait.until(EC.visibility_of(existingCourse))
-        existingCourse.click()
-
-        # See if we are taken to the new course page
-        self.wait.until(EC.title_contains(newCourseName))
-
-if __name__ == "__main__":
-    unittest.main()
-
index 36d7f0f535fc4c580f4062d854a627a6c52d72b1..2d7417693cfec02ef1276d5d441ccba949c07f96 100644 (file)
@@ -2,7 +2,6 @@ from django.test import TestCase
 from karmaworld.apps.courses.models import *
 from django.test.client import Client
 from django.core.urlresolvers import reverse
-import unittest
 import json
 
 class CoursesTests(TestCase):
@@ -143,6 +142,3 @@ class CoursesTests(TestCase):
 
 
 
-if __name__ == "__main__":
-    unittest.main()
-
diff --git a/karmaworld/apps/courses/test/test_selenium.py b/karmaworld/apps/courses/test/test_selenium.py
new file mode 100644 (file)
index 0000000..6c81d36
--- /dev/null
@@ -0,0 +1,161 @@
+from selenium import webdriver
+from selenium.webdriver.support.wait import WebDriverWait
+from selenium.webdriver.common.by import By
+from selenium.webdriver.common.keys import Keys
+from selenium.webdriver.support import expected_conditions as EC
+from django.test import LiveServerTestCase
+from karmaworld.apps.courses.models import *
+import uuid
+
+
+class AddCourseTest(LiveServerTestCase):
+    """Tests the Add Course form."""
+
+    def setUp(self):
+        self.driver = webdriver.Firefox()
+        self.driver.implicitly_wait(3)
+        self.wait = WebDriverWait(self.driver, 10)
+        self.harvard = School.objects.create(name="Harvard University")
+        self.northeastern = School.objects.create(name="Northeastern University")
+
+    def tearDown(self):
+        self.driver.close()
+
+    def selectAutocomplete(self, inputId, keys, fieldIndex):
+        input = self.driver.find_element_by_id(inputId)
+        input.send_keys(keys)
+        self.wait.until(EC.element_to_be_clickable((By.XPATH, "//ul[contains(@class,'ui-autocomplete')][" + str(fieldIndex) + "]/li")))
+        input.send_keys(Keys.DOWN)
+        autocompleteMenuItem = self.driver.find_element_by_id("ui-active-menuitem")
+        autocompleteMenuItem.click()
+
+    def testSchoolName(self):
+        self.driver.get(self.live_server_url)
+
+        # Click "Add Course"
+        addCourseButton = self.driver.find_element_by_id("add-course-btn")
+        addCourseButton.click()
+
+        # Scroll down so the autocomplete menu is in view
+        # This works around some weird failures
+        self.driver.execute_script("javascript:window.scrollBy(0,200)")
+
+        # Type in part of a school name
+        schoolInput = self.driver.find_element_by_id("str_school")
+        schoolInput.send_keys("harvard u")
+
+        # Wait for autocomplete menu to appear
+        self.wait.until(EC.element_to_be_clickable((By.XPATH, "//ul[contains(@class,'ui-autocomplete')][1]/li")))
+
+        # Choose the first suggestion
+        schoolInput.send_keys(Keys.DOWN)
+        activeItem = self.driver.find_element_by_id("ui-active-menuitem")
+        activeItem.click()
+
+        self.assertEqual(schoolInput.get_attribute("value"), "Harvard University")
+
+        schoolId = self.driver.find_element_by_id("id_school")
+        self.assertEqual(schoolId.get_attribute("value"), self.harvard.id)
+
+    def testCreateCourse(self):
+        self.driver.get(self.live_server_url)
+
+        # Click "Add Course"
+        addCourseButton = self.driver.find_element_by_id("add-course-btn")
+        addCourseButton.click()
+        self.driver.execute_script("javascript:window.scrollBy(0,200)")
+
+        # We shouldn't be able to save it yet
+        saveButton = self.driver.find_element_by_id("save-btn")
+        self.assertIn("disabled", saveButton.get_attribute("class"))
+
+        # Choose a school
+        self.selectAutocomplete("str_school", "northeastern u", 1)
+
+        # Check that save button is now enabled
+        self.assertNotIn("disabled", saveButton.get_attribute("class"))
+
+        # Course name
+        newCourseName = "SELENIUM TEST COURSE " + uuid.uuid4().hex
+        courseNameInput = self.driver.find_element_by_id("id_name")
+        courseNameInput.send_keys(newCourseName)
+
+        # Instructor name
+        newInstructorName = "SELENIUM TEST INSTRUCTOR " + uuid.uuid4().hex
+        instructorNameInput = self.driver.find_element_by_id("id_instructor_name")
+        instructorNameInput.send_keys(newInstructorName)
+
+        # Click "Save"
+        saveButton = self.driver.find_element_by_id("save-btn")
+        saveButton.click()
+
+        # See if we are taken to the new course page
+        self.wait.until(EC.title_contains(newCourseName))
+
+
+    def testCreateExistingCourse(self):
+        self.driver.get(self.live_server_url)
+
+        # Click "Add Course"
+        addCourseButton = self.driver.find_element_by_id("add-course-btn")
+        addCourseButton.click()
+        self.driver.execute_script("javascript:window.scrollBy(0,200)")
+
+        # We shouldn't be able to save it yet
+        saveButton = self.driver.find_element_by_id("save-btn")
+        self.assertIn("disabled", saveButton.get_attribute("class"))
+
+        # Choose a school
+        self.selectAutocomplete("str_school", "northeastern u", 1)
+
+        # Check that save button is now enabled
+        self.assertNotIn("disabled", saveButton.get_attribute("class"))
+
+        # Course name
+        newCourseName = "SELENIUM TEST COURSE " + uuid.uuid4().hex
+        courseNameInput = self.driver.find_element_by_id("id_name")
+        courseNameInput.send_keys(newCourseName)
+
+        # Instructor name
+        newInstructorName = "SELENIUM TEST INSTRUCTOR " + uuid.uuid4().hex
+        instructorNameInput = self.driver.find_element_by_id("id_instructor_name")
+        instructorNameInput.send_keys(newInstructorName)
+
+        # Click "Save"
+        saveButton = self.driver.find_element_by_id("save-btn")
+        saveButton.click()
+
+        # See if we are taken to the new course page
+        self.wait.until(EC.title_contains(newCourseName))
+
+        # Now go back to the home page
+        self.driver.get(self.live_server_url)
+
+        # Click "Add Course"
+        addCourseButton = self.driver.find_element_by_id("add-course-btn")
+        addCourseButton.click()
+        self.driver.execute_script("javascript:window.scrollBy(0,200)")
+
+        # Choose the SAME school
+        self.selectAutocomplete("str_school", "northeastern u", 1)
+
+        # The SAME course name
+        self.selectAutocomplete("id_name", newCourseName, 2)
+
+        # The SAME instructor name
+        self.selectAutocomplete("id_instructor_name", newInstructorName, 3)
+
+        # Make sure Save button is disabled and hidden
+        saveButton = self.driver.find_element_by_id("save-btn")
+        self.assertIn("disabled", saveButton.get_attribute("class"))
+        self.wait.until_not(EC.visibility_of(saveButton))
+
+        # Make sure Existing Course link is shown
+        existingCourse = self.driver.find_element_by_id("existing-course-btn")
+        self.wait.until(EC.visibility_of(existingCourse))
+        existingCourse.click()
+
+        # See if we are taken to the new course page
+        self.wait.until(EC.title_contains(newCourseName))
+
+