Selenium is a great way to test your UI. It is compatible with different browsers. I will show you two.
Make sure you are using latest version. At the time of this writing it is 0.19.0.
wget https://github.com/mozilla/geckodriver/releases/download/v0.19.0/geckodriver-v0.19.0-linux64.tar.gz sudo tar -xvzf geckodriver-v0.19.0-linux64.tar.gz sudo chmod +x geckodriver cp geckodriver /usr/local/bin/ sudo cp geckodriver /usr/local/bin/
You can use phantomjs, firefox, chrome, etc.
sudo mv phantomjs-2.1.1-linux-x86_64.tar.bz2 /usr/local/share/. cd /usr/local/share/ sudo tar xjf phantomjs-2.1.1-linux-x86_64.tar.bz2 sudo ln -s /usr/local/share/phantomjs-2.1.1-linux-x86_64 /usr/local/share/phantomjs sudo ln -s /usr/local/share/phantomjs/bin/phantomjs /usr/local/bin/phantomjs
Firefox Installation:
sudo apt-get update wget https://ftp.mozilla.org/pub/firefox/releases/50.0/linux-x86_64/en-US/firefox-50.0.tar.bz2 sudo tar -xjf firefox-50.0.tar.bz2 sudo rm -rf /opt/firefox sudo mv firefox /opt/firefox sudo mv /usr/bin/firefox /usr/bin/firefoxold sudo ln -s /opt/firefoxX/firefox /usr/bin/firefox
Firefox Headless Installation:
sudo apt-get install xvfb pip3 install pyvirtualdisplay==0.2.1
Selenium Installation:
pip3 install selenium==3.6.0
PyUnit Selenium Test Examples:
Setup:
#If you are using headless firefox from pyvirtualdisplay import Display #The selenium imports from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait import unittest, os, time class MySeleniumTests(unittest.TestCase): @classmethod def setUpClass(self): self.server_url = "http://" + os.getenv("WEBSITE_URL", 'localhost:5000') def setUp(self): #if you are using firefox headless browser display = Display(visible=0, size=(1080, 720)) display.start() #Firefox selenium driver. self.driver = webdriver.Firefox() #PhantomJS selenium driver self.driver = webdriver.PhantomJS() self.driver.implicitly_wait(60) self.driver.set_page_load_timeout(60) self.driver.set_window_size(1080, 720) self.base_url = self.server_url self.driver.get(self.base_url + "/") #If your site has a login then you need to set the username and password first. self.driver.find_element_by_id("user").clear() self.driver.find_element_by_id("user").send_keys(USERNAME) self.driver.find_element_by_id("password").clear() self.driver.find_element_by_id("password").send_keys(PWD) self.driver.find_element_by_id("submit").click() time.sleep(1) def tearDown(self): self.driver.quit() if __name__ == "__main__": unittest.main()
Test Title:
self.driver.get(self.server_url) self.assertIn("MySite", self.driver.title)
Find Class:
self.assertTrue(WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located((By.CLASS_NAME, "my-awesome-class"))))
Find ID:
self.assertTrue(WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located((By.ID, "myId"))))
Find Partial Text:
self.driver.find_element_by_partial_link_text("My Text On Page")
Find Element Contains Text:
self.assertTrue('MyText' in self.driver.find_element_by_id('container').text)
Click Element:
self.driver.find_element_by_id('myId').click()
Wait Element To Show:
self.assertTrue(WebDriverWait(self.driver, 10).until(EC.text_to_be_present_in_element((By.ID, 'MyID'), "Text To See")))
xPath Click Second Element:
self.driver.find_element_by_xpath("(//div[@class='my-awesome-class'])[1]").click()
Clear Input:
self.driver.find_element_by_id("myId").clear()
Send Data To Input:
self.driver.find_element_by_id("myId").send_keys('My New Data')