from com.meterware.httpunit import * import unittest, re class TestDice(unittest.TestCase): def setUp(self): self.server_url = "http://www.dice.com" self.open_search_text = "Python" self.days_back = "7" self.jobs_per_page = "20" def test_job_search(self): webConversation = WebConversation() request = GetMethodWebRequest(self.server_url) response = webConversation.getResponse(request) self.assert_(response, "Response for URL " + self.server_url) # notice the navigation path from the image to its associated link image = response.getImageWithSource("new_images/topnav_searchjobs_off.gif") self.assert_(image, "Job image") job_link = image.getLink() self.assert_(job_link, "Job link") print "Found job seeker link" response = job_link.click() self.assert_(response, "Job seeker page") print "Found job seeker page" # Using View Source we see that Dice uses frames response = response.getSubframeContents("ENGINE_WIN") self.assert_(response, "Search engine frame") find_jobs_form = response.getForms()[0] self.assert_(find_jobs_form, "Find jobs form") # Let's put in some free text into the search # We know that the form parameter name is FREE_TEXT by looking on the IE html source find_jobs_form.setParameter("FREE_TEXT", self.open_search_text) find_jobs_form.setParameter("DAYSBACK", self.days_back) find_jobs_form.setParameter("NUM_PER_PAGE", self.jobs_per_page) response = find_jobs_form.submit() self.assert_(response, "Search result frame") print "Got search result" # the results are not listed within a form since each is a hyperlink using GET method result_links = response.getLinks() self.assert_(result_links, "Search links") print "Got search links back" # count only the job opening links opening_counter = 0; for link in result_links: url = link.getURLString() if url.find("/jobsearch/servlet/JobSearch?op") > -1: print("\nFound job opening: " + link.asText()) opening_counter += 1 if opening_counter: response = result_links[0].click() self.assert_(response, "Job opening link") print response.getText() if __name__ == "__main__": unittest.main()