Selenium python GBiB script

From Genecats
Jump to navigationJump to search

Overview

This is an example script that runs on python2.7 with installed selenium (pip install selenium) .

Running

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. For bonus points you could watch the GBiB error log.

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("Click here to reset").click()
        driver.find_element_by_link_text("click here to continue").click()
        driver.find_element_by_name("Submit").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.find_element_by_link_text("click here to continue").click()
        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.find_element_by_link_text("click here to continue").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_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.cse.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.find_element_by_link_text("click here to continue").click()
        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.cse.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.find_element_by_link_text("click here to continue").click()
        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.find_element_by_link_text("click here to continue").click()
        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/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)
        driver.get("http://127.0.0.1:1234/cgi-bin/hgGateway")
    
    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()