Selenium python GBiB script: Difference between revisions
(Link changed from .soe or .cse to .gi) |
|||
(20 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
=Overview= | =Overview= | ||
This | See the [http://genomewiki.cse.ucsc.edu/genecats/index.php/Selenium 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 ([http://genomewiki.cse.ucsc.edu/genecats/index.php/Selenium#Getting_python_ready pip install selenium]) . | |||
Below is also a section about adapting this script to point it to the RR. | Below is also a section about adapting this script to point it to the RR. | ||
=Running= | 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== | |||
<pre> | <pre> | ||
python gbib.selenium.py | python gbib.selenium.py | ||
Line 19: | Line 27: | ||
* Be sure to watch the script run, it isn't verifying results happen. | * Be sure to watch the script run, it isn't verifying results happen. | ||
=Script Code= | ==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. | 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. | ||
Line 50: | Line 58: | ||
driver.find_element_by_link_text("Genomes").click() | driver.find_element_by_link_text("Genomes").click() | ||
driver.find_element_by_link_text("Click here to reset").click() | driver.find_element_by_link_text("Click here to reset").click() | ||
driver. | 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") | Select(driver.find_element_by_name("org")).select_by_visible_text("Mouse") | ||
driver.find_element_by_name("Submit").click() | driver.find_element_by_name("Submit").click() | ||
Line 58: | Line 66: | ||
driver.find_element_by_link_text("Genomes").click() | driver.find_element_by_link_text("Genomes").click() | ||
driver.find_element_by_link_text("Click here to reset").click() | driver.find_element_by_link_text("Click here to reset").click() | ||
driver. | driver.get("http://127.0.0.1:1234/cgi-bin/hgGateway?db=hg19") | ||
driver.find_element_by_name("Submit").click() | 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_xpath("//td[@id='td_data_knownGene']/div[2]/map/area[4]").click() | ||
Line 67: | Line 75: | ||
driver.find_element_by_css_selector("input[type=\"button\"]").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").clear() | ||
driver.find_element_by_name("hgct_customText").send_keys("http://hgwdev. | 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_name("submit").click() | driver.find_element_by_name("submit").click() | ||
driver.find_element_by_link_text("Genomes").click() | driver.find_element_by_link_text("Genomes").click() | ||
driver.find_element_by_link_text("Click here to reset").click() | driver.find_element_by_link_text("Click here to reset").click() | ||
driver. | 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_xpath("//input[@value='track hubs']").click() | ||
driver.find_element_by_link_text("My Hubs").click() | driver.find_element_by_link_text("My Hubs").click() | ||
driver.find_element_by_id("hubUrl").clear() | driver.find_element_by_id("hubUrl").clear() | ||
driver.find_element_by_id("hubUrl").send_keys("http://hgwdev. | 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("hubAddButton").click() | ||
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("Genomes").click() | ||
driver.find_element_by_link_text("Click here to reset").click() | driver.find_element_by_link_text("Click here to reset").click() | ||
driver. | 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.get("http://127.0.0.1:1234/cgi-bin/hgBlat") | ||
driver.find_element_by_name("userSeq").clear() | driver.find_element_by_name("userSeq").clear() | ||
Line 97: | Line 105: | ||
driver.find_element_by_link_text("Genomes").click() | driver.find_element_by_link_text("Genomes").click() | ||
driver.find_element_by_link_text("Click here to reset").click() | driver.find_element_by_link_text("Click here to reset").click() | ||
driver. | driver.get("http://127.0.0.1:1234/cgi-bin/hgGateway?db=hg19") | ||
driver.find_element_by_name("Submit").click() | driver.find_element_by_name("Submit").click() | ||
driver.get("http://127.0.0.1:1234/cgi-bin/hgConvert") | driver.get("http://127.0.0.1:1234/cgi-bin/hgConvert") | ||
Line 105: | Line 113: | ||
driver.find_element_by_name("hglft_doConvert").click() | driver.find_element_by_name("hglft_doConvert").click() | ||
driver.find_element_by_link_text("chr16:90220619-90227077").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.find_element_by_link_text("Genome Browser").click() | ||
driver.get("http://127.0.0.1:1234/cgi-bin/hgLiftOver") | driver.get("http://127.0.0.1:1234/cgi-bin/hgLiftOver") | ||
Line 115: | Line 126: | ||
driver.find_element_by_link_text("Genome Browser").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) | self.assertEqual("chr16:90,220,619-90,227,077", driver.find_element_by_id("positionDisplay").text) | ||
def is_element_present(self, how, what): | def is_element_present(self, how, what): | ||
Line 147: | Line 156: | ||
</pre> | </pre> | ||
=Adapting Script to Point to RR= | ==OLDER: Adapting Script to Point to RR== | ||
You can take this script and copy it to point to the RR. | You can take this script and copy it to point to the RR. | ||
Line 155: | Line 164: | ||
## 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 | ## 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 | ## In the next step you will swap these URLs to point to hgw0-6 | ||
# Copy your test file and name it hgw0.selenium.py | ## Before you do that remove the lines that point to the hgMirror GBiB-only CGI | ||
# Now run this perl statement to swap the GBIB address for the hgw0 address | ### 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 (<code> for i in {0..6}; do cp test.py hgw$i.selenium.py; done </code>) | |||
# Now run this perl statement to '''swap''' the GBIB address for the hgw0 address | |||
##<code>perl -p -i -e 's#127.0.0.1:1234#hgw0.cse.ucsc.edu#' hgw0.selenium.py</code> | ##<code>perl -p -i -e 's#127.0.0.1:1234#hgw0.cse.ucsc.edu#' hgw0.selenium.py</code> | ||
# Repeat the above steps of copying your test file, and swapping the address so you create scripts for all machines | ###OR run this loop <code> 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 </code> | ||
### chmod 700 script; | |||
### '''run''' ./script | |||
# 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 | ## For example, create hgw1.selenium.py | ||
## Then run <code>perl -p -i -e 's#127.0.0.1:1234#hgw1.cse.ucsc.edu#' hgw1.selenium.py</code> | ## Then run <code>perl -p -i -e 's#127.0.0.1:1234#hgw1.cse.ucsc.edu#' hgw1.selenium.py</code> | ||
Line 164: | Line 179: | ||
# Lastly you can run them back to back with this command. Check for the "OK" meaning it completed fine. | # Lastly you can run them back to back with this command. Check for the "OK" meaning it completed fine. | ||
##<code>for i in {0..6}; do echo;echo;echo;echo Running hgw$i test; python hgw$i.selenium.py; done</code> | ##<code>for i in {0..6}; do echo;echo;echo;echo Running hgw$i test; python hgw$i.selenium.py; done</code> | ||
###NOTE: I put this is a script, and then I need to specifically call out the python version I am running | |||
###<code> for i in {0..6}; do echo;echo;echo;echo Running hgw$i test; python3.4 hgw$i.selenium.py; done</code> | |||
=genomeTest.py= | |||
You need to install [https://www.python.org/downloads/release python3] for this to work and then pip3 install selenium and then download and install chrome and a [https://sites.google.com/a/chromium.org/chromedriver/downloads chrome driver]. | |||
<pre> | |||
#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) | |||
</pre> | |||
==Running the program== | |||
Give the program any URL http:genome-euro/asia or hgw0/hgwbeta/hgwdev. | |||
<pre> | |||
python genomeTest.py http:hgwdev.gi.ucsc.edu | |||
. | |||
---------------------------------------------------------------------- | |||
Ran 1 test in 78.135s | |||
OK | |||
</pre> |
Latest revision as of 19:42, 24 September 2018
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