WebDriver高阶API(6)

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()
原文地址:https://www.cnblogs.com/test-chen/p/10731509.html