Selenium python GBiB script
Overview
See the Selenium page for more info about Selenium, but note it will be outdated.
This page has an older example script that is now obsolete and a newer script.
The older script runs on python2.7 with installed selenium (pip install selenium) .
Below is also a section about adapting this script to point it to the RR.
Then after the older scripts, there is a newer superior script genomeTest.py that was working as of May 2017.
OLDER section
You can likely ignore all this information now.
OLDER Running Script
python gbib.selenium.py
Results desired:
$python gbib.selenium.py . ---------------------------------------------------------------------- Ran 1 test in 106.073s OK
- Be sure to watch the script run, it isn't verifying results happen.
OLDER Script Code
This code probably has imperfections, it is copy of an earlier script pointed to genome-euro with the http replaced with GBiBs 127.0.0.01:1234 address.
The process to build it was to use FireFoxes Selenium plug-in to record steps. Then to use the plug-in to export it as python. I recall it needed some changes to work with python2.7. I tested that I could cut and paste the below and execute the code in my environment (Python 2.7.6 with the pip install of selenium).
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import Select from selenium.common.exceptions import NoSuchElementException import unittest, time, re class Genome(unittest.TestCase): def setUp(self): self.driver = webdriver.Firefox() self.driver.implicitly_wait(30) self.base_url = "http://127.0.0.1:1234/cgi-bin/hgGateway" self.verificationErrors = [] self.accept_next_alert = True def test_genome(self): driver = self.driver driver.get(self.base_url + "Be sure you are not being redirected to genome vs. genome-euro") driver.get("http://127.0.0.1:1234/cgi-bin/hgGateway") # ERROR: Caught exception [ERROR: Unsupported command [selectWindow | null | ]] driver.get("http://127.0.0.1:1234/cgi-bin/hgGateway") driver.find_element_by_id("home-link").click() driver.find_element_by_link_text("Genome Browser").click() driver.find_element_by_link_text("Genomes").click() driver.find_element_by_link_text("Click here to reset").click() driver.get("http://127.0.0.1:1234/cgi-bin/hgGateway?db=hg19") Select(driver.find_element_by_name("org")).select_by_visible_text("Mouse") driver.find_element_by_name("Submit").click() driver.find_element_by_link_text("Genomes").click() Select(driver.find_element_by_css_selector("select[name=\"db\"]")).select_by_visible_text("July 2007 (NCBI37/mm9)") driver.find_element_by_name("Submit").click() driver.find_element_by_link_text("Genomes").click() driver.find_element_by_link_text("Click here to reset").click() driver.get("http://127.0.0.1:1234/cgi-bin/hgGateway?db=hg19") driver.find_element_by_name("Submit").click() driver.find_element_by_xpath("//td[@id='td_data_knownGene']/div[2]/map/area[4]").click() driver.find_element_by_link_text("Genome Browser").click() driver.find_element_by_css_selector("map[name=\"map_data_refGene\"] > area.area").click() driver.find_element_by_css_selector("map[name=\"map_data_refGene\"] > area.area").click() driver.find_element_by_link_text("Genome Browser").click() driver.find_element_by_css_selector("input[type=\"button\"]").click() driver.find_element_by_name("hgct_customText").clear() driver.find_element_by_name("hgct_customText").send_keys("http://hgwdev.gi.ucsc.edu/~brianlee/customTracks/examples.txt") driver.find_element_by_name("Submit").click() driver.find_element_by_name("submit").click() driver.find_element_by_link_text("Genomes").click() driver.find_element_by_link_text("Click here to reset").click() driver.get("http://127.0.0.1:1234/cgi-bin/hgGateway?db=hg19") driver.find_element_by_xpath("//input[@value='track hubs']").click() driver.find_element_by_link_text("My Hubs").click() driver.find_element_by_id("hubUrl").clear() driver.find_element_by_id("hubUrl").send_keys("http://hgwdev.gi.ucsc.edu/~brianlee/examples/hubExample/hub.txt") driver.find_element_by_name("hubAddButton").click() driver.find_element_by_name("Submit").click() driver.find_element_by_link_text("Genomes").click() driver.find_element_by_link_text("Click here to reset").click() driver.get("http://127.0.0.1:1234/cgi-bin/hgGateway?db=hg19") driver.get("http://127.0.0.1:1234/cgi-bin/hgBlat") driver.find_element_by_name("userSeq").clear() driver.find_element_by_name("userSeq").send_keys("AACAAAATCAAACTGTTTTTGTTGGACAATTCTCTGTTAAGCAGCTATAA\nGCTGAATGACATTAACCGCAAAATGTAACCATAAAGGCCATAAACCCGAC\nATTGTTAATTAATTAAATGCCTCATTAACTTTTTTAAAAACATGATTTAT\nTCGATTCATAGAAAACTTAACCATCACTACTAAATGCACACACATGCGGT\nTCCACATTGGCATCTTAGCCTAAGAACAGACAGGTTCAACTGTAACTGGC\nCTTTCAGGTGGTCTATTACAGATCTGAAGACAGAGGGTGTTTCTAAACCT\nCAAGAACCAGATTAACAGAAAACAAAGCTTGAGCAGCCTTTTTATTGCAT\nGTGGTATCTTTTTAGCTAAGCAGAAGACAATGATAAAGAGGGGTTTTGGG\nAAACCTCTCCCAAAGCTGTGCATTCATACCGTACCTTATCCTGTTAAGCA\nAACTGTTCTTTTATTTTAAAGGGTTTACACTGCCACATCTGAATGGACTA") driver.find_element_by_name("Submit").click() driver.find_element_by_link_text("browser").click() driver.get("http://127.0.0.1:1234/cgi-bin/hgPcr") driver.find_element_by_name("wp_f").clear() driver.find_element_by_name("wp_f").send_keys("AACAAAATCAAACTGTTTTTGTTGGACAATTCTCTGTTAAGCAGCTATAA") driver.find_element_by_name("wp_r").clear() driver.find_element_by_name("wp_r").send_keys("AACTGTTCTTTTATTTTAAAGGGTTTACACTGCCACATCTGAATGGACTA") driver.find_element_by_name("wp_flipReverse").click() driver.find_element_by_name("Submit").click() driver.find_element_by_link_text("chrX:39918932+39919431").click() driver.find_element_by_link_text("Genomes").click() driver.find_element_by_link_text("Click here to reset").click() driver.get("http://127.0.0.1:1234/cgi-bin/hgGateway?db=hg19") driver.find_element_by_name("Submit").click() driver.get("http://127.0.0.1:1234/cgi-bin/hgConvert") Select(driver.find_element_by_name("hglft_toOrg")).select_by_visible_text("Human") Select(driver.find_element_by_name("hglft_toOrg")).select_by_visible_text("Mouse") Select(driver.find_element_by_name("hglft_toDb")).select_by_visible_text("July 2007 (NCBI37/mm9)") driver.find_element_by_name("hglft_doConvert").click() driver.find_element_by_link_text("chr16:90220619-90227077").click() driver.find_element_by_link_text("Genome Browser").click() driver.get("http://127.0.0.1:1234/cgi-bin/hgMirror") driver.find_element_by_link_text("Predefined tracks sets").click() driver.find_element_by_link_text("Genome Browser").click() driver.get("http://127.0.0.1:1234/cgi-bin/hgLiftOver") Select(driver.find_element_by_name("hglft_fromOrg")).select_by_visible_text("Human") driver.find_element_by_name("hglft_userData").clear() driver.find_element_by_name("hglft_userData").send_keys("chr21:33,031,597-33,041,570") driver.find_element_by_name("hglft_multiple").click() driver.find_element_by_name("Submit").click() driver.find_element_by_link_text("View Conversions").click() driver.find_element_by_link_text("Genome Browser").click() self.assertEqual("chr16:90,220,619-90,227,077", driver.find_element_by_id("positionDisplay").text) def is_element_present(self, how, what): try: self.driver.find_element(by=how, value=what) except NoSuchElementException as e: return False return True def is_alert_present(self): try: self.driver.switch_to_alert() except NoAlertPresentException as e: return False return True def close_alert_and_get_its_text(self): try: alert = self.driver.switch_to_alert() alert_text = alert.text if self.accept_next_alert: alert.accept() else: alert.dismiss() return alert_text finally: self.accept_next_alert = True def tearDown(self): self.driver.quit() self.assertEqual([], self.verificationErrors) if __name__ == "__main__": unittest.main()
OLDER: Adapting Script to Point to RR
You can take this script and copy it to point to the RR.
- Create a directory that you put your RR directed scripts into, I called mine hgw0.6
- Create a text file of the above script copied and pasted
- If you try to run this file, you must have your GBiB up and running as the URLs point to http://127.0.0.1:1234/cgi-bin/hgGateway
- In the next step you will swap these URLs to point to hgw0-6
- Before you do that remove the lines that point to the hgMirror GBiB-only CGI
- driver.get("http://127.0.0.1:1234/cgi-bin/hgMirror")
- driver.find_element_by_link_text("Predefined tracks sets").click()
- Copy your test file and name it hgw0.selenium.py or run this loop (
for i in {0..6}; do cp test.py hgw$i.selenium.py; done
)
- Now run this perl statement to swap the GBIB address for the hgw0 address
perl -p -i -e 's#127.0.0.1:1234#hgw0.cse.ucsc.edu#' hgw0.selenium.py
- OR run this loop
for i in {0..6}; do echo "perl -p -i -e 's#127.0.0.1:1234#hgw$i.cse.ucsc.edu#' hgw$i.selenium.py" >> script; done
- chmod 700 script;
- run ./script
- OR run this loop
- Repeat the above steps of copying your test file, and swapping the address so you create scripts for all machines (if you didn't do the loop)
- For example, create hgw1.selenium.py
- Then run
perl -p -i -e 's#127.0.0.1:1234#hgw1.cse.ucsc.edu#' hgw1.selenium.py
- At the end you will have seven selenium scripts for hgw0.... to hgw6.selenium.py
- Lastly you can run them back to back with this command. Check for the "OK" meaning it completed fine.
for i in {0..6}; do echo;echo;echo;echo Running hgw$i test; python hgw$i.selenium.py; done
- NOTE: I put this is a script, and then I need to specifically call out the python version I am running
for i in {0..6}; do echo;echo;echo;echo Running hgw$i test; python3.4 hgw$i.selenium.py; done
genomeTest.py
You need to install python3 for this to work and then pip3 install selenium and then download and install chrome and a chrome driver.
#This requires you to have /Users/brianlee/Downloads/chromedriver installed. #You can get this from https://sites.google.com/a/chromium.org/chromedriver/downloads # -*- coding: utf-8 -*- from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.support.ui import Select from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import NoSuchElementException from selenium.common.exceptions import NoAlertPresentException import unittest, time, re, sys class GenomeTest(unittest.TestCase): def __init__(self, testname, host): super(GenomeTest, self).__init__(testname) self.base_url = host self.driver = webdriver.Chrome("/Users/brianlee/Downloads/chromedriver") self.driver.implicitly_wait(30) self.verificationErrors = [] self.accept_next_alert = True def test_genome_test(self): #print("url is %s\n" % self.host) driver = self.driver driver.get(self.base_url + "/index.html") driver.find_element_by_link_text("Home").click() driver.find_element_by_link_text("Genomes").click() if self.base_url[-20:] == "genome-euro.ucsc.edu": # genome-euro driver.find_element_by_link_text("genome-euro.ucsc.edu").click() if self.base_url[-20:] == "genome-asia.ucsc.edu": # genome-asia driver.find_element_by_link_text("genome-asia.ucsc.edu").click() self.cart_reset(driver) Select(driver.find_element_by_id("selectAssembly")).select_by_visible_text("Feb. 2009 (GRCh37/hg19)") driver.find_element_by_css_selector("div.jwGoButton").click() self.driver.implicitly_wait(1000) driver.find_element_by_xpath("//td[@id='td_data_knownGene']/div[2]/map/area[5]").click() driver.get(self.base_url + "/cgi-bin/hgGateway?db=mm10") # check mm10 hgTracks and hgGene self.driver.implicitly_wait(1000) self.hover_over_menu(driver, "//li[@id='tools1']", "//li[@id='tools1']/ul/li[3]") # click mm10 from Genomes drop down driver.find_element_by_xpath("//td[@id='td_data_knownGene']/div[2]/map/area[6]").click() # clicks into hgGene # test custom track driver.get(self.base_url + "/cgi-bin/hgGateway?db=hg19") self.driver.implicitly_wait(1000) if self.base_url[-4:] == "1234": # gbib self.hover_over_menu(driver, "//li[@id='myData']", "//li[@id='myData']/ul/li[5]") else: # any other mirror self.hover_over_menu(driver, "//li[@id='myData']", "//li[@id='myData']/ul/li[4]") driver.find_element_by_name("hgct_customText").clear() driver.find_element_by_name("hgct_customText").send_keys("http://hgwdev.gi.ucsc.edu/~brianlee/customTracks/examples.WITHOUT.FTPS.txt") driver.find_element_by_name("Submit").click() self.driver.implicitly_wait(1000) driver.find_element_by_name("submit").click() self.cart_reset(driver) #Test mm10 ENCODE hub driver.get(self.base_url + "/cgi-bin/hgTracks?db=mm10&hideTracks=1") driver.get(self.base_url + "/cgi-bin/hgGateway?db=mm10&hubUrl=https://www.encodeproject.org/experiments/ENCSR736GVO/@@hub/hub.txt") driver.get(self.base_url + "/cgi-bin/hgHubConnect?#unlistedHubs") driver.find_element_by_link_text("My Hubs").click() self.assertEqual("ENCODE Data Coordination Center Data Hub", driver.find_element_by_xpath("//table[@id='unlistedHubsTable']/tbody/tr/td[3]").text) driver.get(self.base_url + "/cgi-bin/hgTracks") driver.find_element_by_id("positionInput").clear() driver.find_element_by_id("positionInput").send_keys("chr12:56,694,976-56,714,605") driver.find_element_by_id("hgt.jump").click() self.driver.implicitly_wait(1000) driver.find_element_by_id("hgt.out1").click() self.cart_reset(driver) #Test AssemblyHub search driver.get(self.base_url + "/cgi-bin/hgGateway?hubUrl=http://genome-test.gi.ucsc.edu/gbdb/hubs/genbank/vertebrate_mammalian/hub.ncbi.txt&genome=GCA_000493695.1_BalAcu1.0&position=lastDbPos") driver.get(self.base_url + "/cgi-bin/hgTracks") driver.find_element_by_id("positionInput").clear() driver.find_element_by_id("positionInput").send_keys("ATDI01079686") driver.find_element_by_id("hgt.jump").click() self.driver.implicitly_wait(1000) driver.find_element_by_id("hgt.out1").click() driver.get(self.base_url + "/cgi-bin/cartReset") # Test HGVS searches driver.get(self.base_url + "/cgi-bin/hgTracks?db=hg38") driver.find_element_by_id("positionInput").clear() driver.find_element_by_id("positionInput").send_keys("NM_000310.3(PPT1):c.271_287del17insTT") driver.find_element_by_id("hgt.jump").click() driver.find_element_by_id("positionInput").clear() driver.find_element_by_id("positionInput").send_keys("NM_007262.4(PARK7):c.-24+75_-24+92dup") driver.find_element_by_id("hgt.jump").click() driver.find_element_by_id("positionInput").clear() driver.find_element_by_id("positionInput").send_keys("NM_006172.3(NPPA):c.456_*1delAA") driver.find_element_by_id("hgt.jump").click() driver.find_element_by_id("positionInput").clear() driver.find_element_by_id("positionInput").send_keys("MYH11:c.503-14_503-12del") driver.find_element_by_id("hgt.jump").click() driver.find_element_by_id("positionInput").clear() driver.find_element_by_id("positionInput").send_keys("NM_198576.3(AGRN):c.1057C>T") driver.find_element_by_id("hgt.jump").click() driver.find_element_by_id("positionInput").clear() driver.find_element_by_id("positionInput").send_keys("NM_198056.2:c.1654G>T") driver.find_element_by_id("hgt.jump").click() driver.find_element_by_id("positionInput").clear() driver.find_element_by_id("positionInput").send_keys("NP_002993.1:p.Asp92Glu") driver.find_element_by_id("hgt.jump").click() driver.find_element_by_id("positionInput").clear() driver.find_element_by_id("positionInput").send_keys("NP_002993.1:p.D92E") driver.find_element_by_id("hgt.jump").click() driver.find_element_by_id("positionInput").clear() driver.find_element_by_id("positionInput").send_keys("BRCA1 Ala744Cys") driver.find_element_by_id("hgt.jump").click() driver.find_element_by_id("positionInput").clear() driver.find_element_by_id("positionInput").send_keys("NM_000828.4:c.-2G>A") driver.find_element_by_id("hgt.jump").click() self.cart_reset(driver) driver.get(self.base_url + "/cgi-bin/hgGateway?db=hg19") self.hover_over_menu(driver, "//li[@id='tools3']", "//li[@id='tools3']/ul/li[1]") # hgBlat driver.find_element_by_name("userSeq").clear() driver.find_element_by_name("userSeq").send_keys("AACAAAATCAAACTGTTTTTGTTGGACAATTCTCTGTTAAGCAGCTATAA\\nGCTGAATGACATTAACCGCAAAATGTAACCATAAAGGCCATAAACCCGAC\\nATTGTTAATTAATTAAATGCCTCATTAACTTTTTTAAAAACATGATTTAT\\nTCGATTCATAGAAAACTTAACCATCACTACTAAATGCACACACATGCGGT\\nTCCACATTGGCATCTTAGCCTAAGAACAGACAGGTTCAACTGTAACTGGC\\nCTTTCAGGTGGTCTATTACAGATCTGAAGACAGAGGGTGTTTCTAAACCT\\nCAAGAACCAGATTAACAGAAAACAAAGCTTGAGCAGCCTTTTTATTGCAT\\nGTGGTATCTTTTTAGCTAAGCAGAAGACAATGATAAAGAGGGGTTTTGGG\\nAAACCTCTCCCAAAGCTGTGCATTCATACCGTACCTTATCCTGTTAAGCA\\nAACTGTTCTTTTATTTTAAAGGGTTTACACTGCCACATCTGAATGGACTA") driver.find_element_by_name("Submit").click() self.driver.implicitly_wait(1000) driver.find_element_by_link_text("browser").click() driver.find_element_by_id("p_btn_hgUserPsl").click() self.driver.implicitly_wait(1000) self.cart_reset(driver) if self.base_url[-4:] == "1234": self.hover_over_menu(driver, "//li[@id='tools3']", "//li[@id='tools3']/ul/li[6]") # hgPcr else: self.hover_over_menu(driver, "//li[@id='tools3']", "//li[@id='tools3']/ul/li[7]") # hgPcr driver.find_element_by_name("wp_f").clear() driver.find_element_by_name("wp_f").send_keys("AACAAAATCAAACTGTTTTTGTTGGACAATTCTCTGTTAAGCAGCTATAA") driver.find_element_by_name("wp_r").clear() driver.find_element_by_name("wp_r").send_keys("AACTGTTCTTTTATTTTAAAGGGTTTACACTGCCACATCTGAATGGACTA") driver.find_element_by_name("wp_flipReverse").click() driver.find_element_by_name("Submit").click() self.driver.implicitly_wait(1000) driver.find_element_by_link_text("chrX:40059679+40060178").click() self.driver.implicitly_wait(1000) self.cart_reset(driver) driver.find_element_by_link_text("Genome Browser").click() self.hover_over_menu(driver, "//li[@id='view']", "//li[@id='view']/ul/li[3]") # hgConvert driver.find_element_by_name("hglft_doConvert").click() driver.find_element_by_link_text("chr9:136127387-136156434").click() driver.find_element_by_css_selector("#tools3 > span").click() if self.base_url[-4:] == "1234": self.hover_over_menu(driver, "//li[@id='tools3']", "//li[@id='tools3']/ul/li[7]") # hgLiftOver else: self.hover_over_menu(driver, "//li[@id='tools3']", "//li[@id='tools3']/ul/li[8]") # hgLiftOver driver.find_element_by_name("hglft_userData").clear() driver.find_element_by_name("hglft_userData").send_keys("chr21:33,031,597-33,041,570") def hover_over_menu(self, driver, menu_header, menu_item_xpath): """hovers over menubar and clicks an item in a dropdown list""" # below code taken from: # http://stackoverflow.com/questions/27934945/selenium-move-to-element-does-not-always-mouse-hover men_menu = WebDriverWait(driver,10).until(EC.visibility_of_element_located(( By.XPATH, menu_header))) ActionChains(driver).move_to_element(men_menu).perform() link_to_click = WebDriverWait(driver,10).until(EC.visibility_of_element_located( (By.XPATH, menu_item_xpath))) link_to_click.click() def cart_reset(self, driver): # hovers over the Genome Browser menubar item and clicks cart reset self.hover_over_menu(driver, "//li[@id='tools2']", "//li[@id='tools2']/ul/li[3]") def is_element_present(self, how, what): try: self.driver.find_element(by=how, value=what) except NoSuchElementException as e: return False return True def is_alert_present(self): try: self.driver.switch_to_alert() except NoAlertPresentException as e: return False return True def close_alert_and_get_its_text(self): try: alert = self.driver.switch_to_alert() alert_text = alert.text if self.accept_next_alert: alert.accept() else: alert.dismiss() return alert_text finally: self.accept_next_alert = True def tearDown(self): self.driver.quit() self.assertEqual([], self.verificationErrors) if __name__ == "__main__": suite = unittest.TestSuite() suite.addTest(GenomeTest("test_genome_test", sys.argv[1])) unittest.TextTestRunner().run(suite)
Running the program
Give the program any URL http:genome-euro/asia or hgw0/hgwbeta/hgwdev.
python genomeTest.py http:hgwdev.gi.ucsc.edu . ---------------------------------------------------------------------- Ran 1 test in 78.135s OK