12、高亮显示操作的元素
#encoding=utf-8 import unittest from selenium import webdriver import time def highLightElement(driver,element): #封闭好的高亮显示页面元素的方法 #使用Javascript代码将传入的页面元素对象的背景颜色和边框颜色分别设置为绿色和红色 driver.execute_script("arguments[0].setAttribute('style',arguments[1]);", element,"background:green;border:2px solid red;") class TestDemo(unittest.TestCase): def setUp(self): self.driver = webdriver.Ie(executable_path="D:\IEDriverServer") def test_HighLightElement(self): url = "http://www.sogou.com" #访问搜狗首页 self.driver.get(url) #获取搜索框元素对象 searchBox = self.driver.find_element_by_id("query") #调用高亮显示元素的封闭函数,将搜索输入框进行高亮显示 highLightElement(self.driver,searchBox) #等待3秒,以便查看高亮效果 time.sleep(3) searchBox.send_keys("wow") #获取搜索按钮元素对象 submitButton = self.driver.find_element_by_id("stb") # 调用高亮显示元素的封闭函数,将搜索按钮进行高亮显示 highLightElement(self.driver,submitButton) time.sleep(3) submitButton.click() time.sleep(3) def tearDown(self): self.driver.quit() if __name__ == "__main__": unittest.main()
13、浏览器中新型标签页
(IE不兼容,谷歌要升级才能正常执行,火狐未安装)
#encoding=utf-8 import unittest import time from selenium import webdriver import win32con,win32api VK_CODE = {"ctrl":0x11,"t":0x54,"tab":0x09} #键盘键按下 def keyDown(keyName): win32api.keybd_event(VK_CODE[keyName],0,0,0) #键盘键抬起 def keyUp(keyName): win32api.keybd_event(VK_CODE[keyName],0,win32con.KEYEVENTF_KEYUP,0) #封闭的按键方法 def simulateKey(firstKey,secondKey): keyDown(firstKey) keyDown(secondKey) keyUp(secondKey) keyUp(firstKey) class TestDemo(unittest.TestCase): def setUp(self): #self.driver = webdriver.Ie(executable_path = "D:\IEDriverServer") self.driver = webdriver.Chrome(executable_path="D:\chromedriver") self.driver.maximize_window() def test_newTab(self): #等待3秒,等待浏览器启动完成 time.sleep(3) #使用for循环,再新开两个新的标签页 for i in range(2): simulateKey("ctrl","t") #获取所有打开的窗口句柄 all_handles = self.driver.window_handles print len(all_handles) #通过Ctrl+Tab组合键,将当前页面切换为默认页面,也就是最先打开 的标签页 simulateKey("ctrl","tab") #访问搜狗首页 self.driver.get("http://www.sogou.com") time.sleep(2) self.driver.find_element_by_id("query").send_keys(u"光荣之路") self.driver.find_element_by_id("stb").click() time.sleep(3) self.assertTrue(u"乔什·卢卡斯" in self.driver.page_source) #将当前窗口句柄切换到第二个标签页 self.driver.switch_to.window(all_handles[1]) self.driver.get("http://www.baidu.com") self.driver.find_element_by_id("kw").send_keys(u"WebDriver 实战宝典") self.driver.find_element_by_id("su").click() time.sleep(3) self.assertTrue(u"吴晓华" in self.driver.page_source) #将当前窗口的句柄切换到第三个标签页 self.driver.switch_to.window(all_handles[2]) self.driver.get("http://www.baidu.com") self.driver.find_element_by_id("kw").send_keys("selenium") self.driver.find_element_by_id("su").click() time.sleep(3) self.assertTrue("www.seleniumhq.org" in self.driver.page_source) def tearDown(self): self.driver.quit() if __name__ == "__main__": unittest.main()
14、异常、断言失败截屏
首页PyCharm中创建一个工程GloryRoad,再在该 工程下创建三个文件:DateUtil.py FileUtil.py SoGou.py
DateUtil.py
#encoding=utf-8 import time from datetime import datetime """ 本文件主要用于获取当前的日期及时间,用于生成保存截图文件目录名 """ def currentDate(): date = time.localtime() #构造今天的日期字符串 today = str(date.tm_year)+'-'+str(date.tm_mon)+"-"+str(date.tm_mday) return today def currentTime(): timeStr = datetime.now() #构造当前的时间字符串 now = timeStr.strftime("%H-%M-%S") return now if __name__ == "__main__": print currentDate() print currentTime()
FileUtil.py
#encoding=utf-8 from DateUtil import currentDate,currentTime import os """ 本文件主要用于创建目录,用于存放异常截图,创建目录的方法仅大家参考, 将来用于根据测试需要创建测试人员需要的目录或文件 """ print os.getcwd() def createDir(): #获取当前文件所在目录的绝对路径 currentPath = os.path.dirname(os.path.abspath(__file__)) #获取今天的日期字符串 today = currentDate() #构造以今天日期命名的目录的绝对路径 dateDir = os.path.join(currentPath,today) print dateDir if not os.path.exists(dateDir): #如果今天日期命名的目录不存在则创建 os.mkdir(dateDir) #获取当前的时间字符串 now = currentTime() #构造以当前时间命名的目录的绝对路径 timeDir = os.path.join(dateDir,now) print timeDir if not os.path.exists(timeDir): #如果以当前时间命名的目录不存在则创建 os.mkdir(timeDir) return timeDir
Sogou.py
#encoding=utf-8 from selenium import webdriver import unittest,time,os from FileUtil import createDir import traceback #解决编码问题 import sys reload(sys) sys.setdefaultencoding("utf-8") #创建存放异常截图的目录,并得到本次实例中存放图片目录的绝对路径 #并且作为全局变量,以供本次所有测试用例调用 picDir = createDir() def takeScreenshot(driver,savePath,picName): #封装截屏方法 #构造屏幕截图路径及图片名 #因为Windows默认编码是GBK,而传入的图片名为utf-8编码 #所以这是需要进行转码,以便让图片名中的中文字符能正常显示 picPath = os.path.join(savePath,(str(picName).decode("utf-8").encode("gbk") + ".png")) try: #调用WebDriver提供的get_screenshot_as_file()方法,将截取的屏幕图片保存为本地文件 driver.get_screenshot_as_file(picPath) except Exception,e: #打印异常堆栈信息 print traceback.print_exc() class TestDemo(unittest.TestCase): def setUp(self): self.driver = webdriver.Ie(executable_path = "D:\IEDriverServer") def test_SoGouSearch(self): url = "http://www.sogou.com" self.driver.get(url) try: self.driver.find_element_by_id("query").send_keys("wow") self.driver.find_element_by_id("stb").click() time.sleep(3) #断言页面的代码中是否存在“事在人为”这4个关键字 #因为页面中没有这4个字,所以会触发except语句的执行,并触发截图操作 self.assertIn(u"事在人为" ,self.driver.page_source) except AssertionError,e: #调用封闭好的截图方法,进行截图并保存在本地 #takeScreenshot(self.driver,picDir,e) #使用异常作为文件名时,未成功保存 takeScreenshot(self.driver,picDir,"Error") except Exception,e: print traceback.print_exc() takeScreenshot(self.driver,picDir,e) def tearDown(self): self.driver.quit() if __name__ == "__main__": unittest.main()