Skip to content

Instantly share code, notes, and snippets.

@octaflop
Last active December 17, 2015 04:59
Show Gist options
  • Select an option

  • Save octaflop/5554880 to your computer and use it in GitHub Desktop.

Select an option

Save octaflop/5554880 to your computer and use it in GitHub Desktop.
import unittest
from selenium import webdriver
# from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import time
import os
import re
import uuid
class RegisterUser(unittest.TestCase):
"""
A basic user registration pattern.
TODO: finish
Includes an example of grabbing off of the /tmp/ for validation email.
TODO: Perhaps let this inherit from LoginLogout
"""
def setUp(self):
random_email = "%s" % uuid.uuid1()
self.test_user = {
"first_name": "Register Test",
"last_name": "Selenium",
"email": "fake_%[email protected]" % random_email[:7],
"password": "password"
}
self.chrome_browser = webdriver.Chrome()
self.ff_browser = webdriver.Firefox()
# self.pjs_browser = webdriver.PhantomJS()
self.URL = "http://localhost:8000"
def _find_last_email(self):
os.chdir("/tmp/zaneprep-messages")
files = os.listdir(".")
files.sort(key=os.path.getmtime, reverse=True)
return files[0]
def _extract_link_and_make_http(self, filename):
with open(filename) as f:
found = re.search("(?P<url>https?://[^\s]+)", f.read()).group('url')
return 'http://' + found[8:]
def _register(self, browser):
browser.get(self.URL)
# Pop-up the Log In box
elem_login = browser.find_element_by_link_text("Log In")
elem_login.click()
time.sleep(2)
elem_reg_email = browser.find_element_by_id("id_email")
elem_reg_fname = browser.find_element_by_id("id_first_name")
elem_reg_lname = browser.find_element_by_id("id_last_name")
elem_reg_password1 = browser.find_element_by_id("id_password1")
elem_reg_password2 = browser.find_element_by_id("id_password2")
elem_reg_agree = browser.find_element_by_name("tos_agree")
elem_reg_submit = browser.find_element_by_id("create-account")
elem_reg_email.send_keys(self.test_user['email'])
elem_reg_fname.send_keys(self.test_user['first_name'])
elem_reg_lname.send_keys(self.test_user['last_name'])
elem_reg_password1.send_keys(self.test_user['password'])
elem_reg_password2.send_keys(self.test_user['password'])
elem_reg_agree.click()
elem_reg_submit.click()
time.sleep(2)
# Now we need to parse the /tmp/zaneprep-messages folder for the latest email
# and change the activation link to something non-SSL
self.activation_url = self._extract_link_and_make_http(self._find_last_email())
browser.get(self.activation_url)
# Now we use this link to login
elem_email = browser.find_element_by_name("email")
elem_password = browser.find_element_by_name("password")
elem_email.send_keys(self.test_user["email"])
elem_password.send_keys(self.test_user["password"])
elem_password.send_keys(Keys.RETURN) # Login
time.sleep(2)
self.assertIn("Home / Wooters / Zane Prep", browser.title)
# Probably need a more explicit ID here
elem_userdropdown = browser.find_element_by_class_name("dropdown-toggle")
elem_userdropdown.click()
time.sleep(3) # So the dropdown is distinctly seen
elem_logout = browser.find_element_by_link_text("Logout")
elem_logout.click()
def test_chrome_user_register(self):
self._register(self.chrome_browser)
def test_ff_user_login(self):
self._register(self.ff_browser)
# def test_pjs_user_login(self):
# self._register(self.pjs_browser)
def tearDown(self):
self.chrome_browser.close()
self.ff_browser.close()
# self.pjs_browser.close()
if __name__ == "__main__":
unittest.main()
# coding: utf-8
import unittest
from selenium import webdriver
# from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import time
import os
import re
import uuid
class RegisterUser(unittest.TestCase):
"""
A basic user registration pattern.
TODO: finish
Includes an example of grabbing off of the /tmp/ for validation email.
TODO: Perhaps let this inherit from LoginLogout
"""
def setUp(self):
random_email = "%s" % uuid.uuid1()
self.test_user = {
"first_name": "Register Test",
"last_name": "Selenium",
"email": "fake_%[email protected]" % random_email[:7],
"password": "password"
}
self.pjs_browser = webdriver.PhantomJS()
self.URL = "http://localhost:8000"
def _find_last_email(self):
os.chdir("/tmp/zaneprep-messages")
files = os.listdir(".")
files.sort(key=os.path.getmtime, reverse=True)
return files[0]
def _extract_link_and_make_http(self, filename):
with open(filename) as f:
found = re.search("(?P<url>https?://[^\s]+)", f.read()).group('url')
return 'http://' + found[8:]
def _register(self, browser):
browser.get(self.URL)
# Pop-up the Log In box
elem_login = browser.find_element_by_link_text("Log In")
elem_login.click()
time.sleep(2)
elem_reg_email = browser.find_element_by_id("id_email")
elem_reg_fname = browser.find_element_by_id("id_first_name")
elem_reg_lname = browser.find_element_by_id("id_last_name")
elem_reg_password1 = browser.find_element_by_id("id_password1")
elem_reg_password2 = browser.find_element_by_id("id_password2")
elem_reg_agree = browser.find_element_by_name("tos_agree")
elem_reg_submit = browser.find_element_by_id("create-account")
elem_reg_email.send_keys(self.test_user['email'])
elem_reg_fname.send_keys(self.test_user['first_name'])
elem_reg_lname.send_keys(self.test_user['last_name'])
elem_reg_password1.send_keys(self.test_user['password'])
elem_reg_password2.send_keys(self.test_user['password'])
elem_reg_agree.click()
elem_reg_submit.click()
time.sleep(2)
# Now we need to parse the /tmp/zaneprep-messages folder for the latest email
# and change the activation link to something non-SSL
self.activation_url = self._extract_link_and_make_http(self._find_last_email())
browser.get(self.activation_url)
# Now we use this link to login
elem_email = browser.find_element_by_name("email")
elem_password = browser.find_element_by_name("password")
elem_email.send_keys(self.test_user["email"])
elem_password.send_keys(self.test_user["password"])
elem_password.send_keys(Keys.RETURN) # Login
time.sleep(2)
self.assertIn("Home / Wooters / Zane Prep", browser.title)
# Probably need a more explicit ID here
elem_userdropdown = browser.find_element_by_class_name("dropdown-toggle")
elem_userdropdown.click()
time.sleep(3) # So the dropdown is distinctly seen
elem_logout = browser.find_element_by_link_text("Logout")
elem_logout.click()
def test_pjs_user_login(self):
self._register(self.pjs_browser)
def tearDown(self):
self.pjs_browser.close()
if __name__ == "__main__":
unittest.main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment