WebDriver高阶API(1)
WebDriver高阶API(1)
1、使用JavaScript操作页面元素
#encoding=utf-8 import time import unittest import traceback from selenium import webdriver from selenium.common.exceptions import WebDriverException class TestDemo(unittest.TestCase): def setUp(self): #启动浏览器 self.driver = webdriver.Ie(executable_path = "D:\\IEDriverServer") def test_executeScript(self): url = "http://www.sogou.com" #访问搜狗首页 self.driver.get(url) #构造JavaScript查找搜狗首页的搜索输入框并输入“魔兽世界”的代码字符串 searchInputBoxJs = "document.getElementById('query').value='魔兽世界'" #构造JavaScript查找搜狗首页的搜索按钮并点击的代码字符串 searchButtonJs = "document.getElementById('stb').click()" try: #通过JavaScript代码在搜索首页输入框中输入“魔兽世界” self.driver.execute_script(searchInputBoxJs) time.sleep(2) #通过JavaScript代码点击搜狗首页上的搜索按钮 self.driver.execute_script(searchButtonJs) time.sleep(2) #断言 self.assertTrue(u"魔兽世界" in self.driver.page_source) except WebDriverException,e: #当定位失败时,会抛出WebDriverException异常 print u"在页面中没有找到要操作的页面元素",traceback.print_exc() except AssertionError,e: print u"页面不存在断言的关键字" except Exception,e: #发生其他异常时,打印异常堆栈信息 print traceback.print_exc() def tearDown(self): self.driver.quit() if __name__ == "__main__": unittest.main()
2、操作滚动条 JS
#encoding=utf-8 import time import unittest import traceback from selenium import webdriver class TestDemo(unittest.TestCase): def setUp(self): #启动浏览器 self.driver = webdriver.Ie(executable_path = "D:\\IEdriverServer") def test_scroll(self): url = "http://www.sohu.com" #访问搜狗首页 try: self.driver.get(url) #使用JavaScript的scrollTo函数和document.body.scrollHeight参数 # 将页面滚动条滑动到页面的最下方 self.driver.execute_script("window.scrollTo(0,document.body.scrollHeight);") #停顿3秒,用于人工验证滚动条是否滑动到指定位置 #根据测试需要,可注释下面的停顿代码 time.sleep(3) #使用JavaScript 的scrollIntoView函数将被遮挡的元素滚动到可见屏幕上 #scrollIntoView(true)表示将元素滚动到屏幕中间 #scrollIntoView(false)表示将元素滚动到屏幕底部 self.driver.execute_script("document.getElementsByTagName('a')[500].scrollIntoView(true);") time.sleep(3) #使用javascript的scrollBy方法,使用0和400横纵坐参数 #将页面纵向向下滚动400像素 self.driver.execute_script("window.scrollBy(0,400)") time.sleep(3) except Exception,e: print traceback.print_exc() def tearDown(self): self.driver.quit() if __name__ == "__main__": unittest.main()
3、操作Ajax产生的浮动框
方法一:通过模拟键盘下箭头进行选择悬浮框选项
#encoding=utf-8 import time import unittest from selenium import webdriver from selenium.webdriver.common.keys import Keys class TestDemo(unittest.TestCase): def setUp(self): #启动浏览器 self.driver = webdriver.Ie(executable_path = "D:\\IEDriverServer") def test_AjaxDivOptionByKeys(self): url = "http://www.sogou.com" #访问sogou首页 self.driver.get(url) #找到搜狗首页中的搜索输入框页面元素 searchBox = self.driver.find_element_by_id("query") #在输入框输入 “魔兽世界” searchBox.send_keys(u"魔兽世界") #等待2秒,以便悬浮框加载完成 time.sleep(2) for i in range(3): #选择悬浮框中的第几个联想关键词选项就循环几次 #模拟键盘单击下箭头 searchBox.send_keys(Keys.DOWN) time.sleep(0.5) #当按下箭头到想要选择的选项后,瑞模拟键盘按回车键,选中该选项 searchBox.send_keys(Keys.ENTER) time.sleep(2) def tearDown(self): self.driver.quit() if __name__ == "__main__": unittest.main()
方法二:通过匹配模糊内容选择悬浮框中选项
#encoding=utf-8 import time import unittest import traceback from selenium import webdriver from selenium.common.exceptions import NoSuchElementException class TestDemo(unittest.TestCase): def setUp(self): #启动浏览器 self.driver = webdriver.Ie(executable_path = "D:\\IEDriverServer") def test_AjaxDivOptionByWords(self): url = "http://www.sogou.com/" #访问搜狗首页 self.driver.get(url) try: #找到搜狗首页中的搜索输入框页面元素 searchBox = self.driver.find_element_by_id("query") #在搜索输入框中输入“魔兽世界” searchBox.send_keys(u"魔兽世界") #等待2秒,以便悬浮框完成林加载 time.sleep(2) #查找内容包含“怀旧服”的悬浮框选项 suggetion_option = self.driver.find_element_by_xpath("//ul/li[contains(.,'怀旧服')]") #单击找到的悬浮选项 suggetion_option.click() time.sleep(2) except NoSuchElementException,e: #打印异常堆栈信息 print traceback.print_exc() def tearDown(self): self.driver.quit() if __name__ == "__main__": unittest.main()
方法三:固定选择某一项,使用索引
#encoding=utf-8 import time import unittest import traceback from selenium import webdriver from selenium.common.exceptions import NoSuchElementException class TestDemo(unittest.TestCase): def setUp(self): #启动浏览器 self.driver = webdriver.Ie(executable_path = "D:\\IEDriverServer") def test_AjaxDivOptionByIndex(self): url = "http://www.sogou.com" #访问搜狗首页 self.driver.get(url) try: #找到搜狗首页中的搜索输入框页面元素 searchBox = self.driver.find_element_by_id("query") #在输入框中输入 “魔兽世界” searchBox.send_keys(u"魔兽世界") #等待2秒以便悬浮杠加载完成 time.sleep(2) #查找悬浮框中的第三项,只需要更改li[3]中索引数字,就可以实现任意单击悬浮框中的选项。注意,索引从1开始 suggetion_option = self.driver.find_element_by_xpath("//*[@id='vl']/div[1]/ul/li[3]") #单击找到的选项 suggetion_option.click() time.sleep(3) except NoSuchElementException,e: #打印异常堆栈信息 print traceback.print_exc() def tearDown(self): self.driver.quit() if __name__ == "__mian__": unittest.main()
4、结束Windows中浏览器进程
#encoding=utf-8 import unittest from selenium import webdriver class TestDemo(unittest.TestCase): def test_killWindowsProcess(self): chromeDriver = webdriver.Chrome(executable_path="D:\\chromedriver") ieDriver = webdriver.Ie(executable_path="D:\\IEDriverServer") #导入os包 import os #结束ie浏览器进程 returnCode = os.system("taskkill /F /iM iexplore.exe") if returnCode == 0: print u"成功结束Ie浏览器进程" else: print u"结束IE浏览器进程失败" #结束chrome浏览器 returnCode = os.system("taskkill /F /iM chrome.exe") if returnCode == 0: print u"成功结束chrome浏览器进程" else: print u"结束chrome浏览器进程失败" if __name__ == "__main__": unittest.main()