自动化测试(3-3):基本API

  • (1)截屏(两种方式:只截浏览器和截当前页面的屏幕)
#例子18:截屏(两种方式:只截浏览器和截当前页面的屏幕)
#一般用在用例执行失败时截屏,便于后续查询
#IE截屏就截取一半,图片下方显示黑色的(一般驱动问题)

#方法一:只截浏览器
import unittest
import time
from selenium import webdriver
 
class VisitSogouByIE(unittest.TestCase):

    def setUp(self):
        #启动浏览器
        #self.driver = webdriver.Chrome(executable_path = "E:\\chromedriver")
        self.driver = webdriver.Firefox(executable_path = "E:\\geckodriver")
        #self.driver = webdriver.Ie(executable_path = "E:\\IEDriverServer")
        
    def test_captureScreenInCurrentWindow(self):
        url = "http://www.sohu.com"
        # 访问搜狗首页
        self.driver.get(url)
        time.sleep(3)
        try:
            '''
            调用get_screenshot_as_file(filename)方法,对浏览器当前打开页面
            进行截图,并保为F盘下的1.png文件。
            '''
            result = self.driver.get_screenshot_as_file("F:\\1.png")
            print (result)
        except IOError as e:
            print (e)
            
    def tearDown(self):
        # 退出浏览器
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()


#方法二:截当前页面的屏幕(先安装下包:pip install pillow)
#截取的图片会在执行python文件的当前目录中显示
from PIL import ImageGrab
im=ImageGrab.grab()
im.save("1.jpg","jpeg")
  • (2)拖拽(用的不多,需要导入ActionChains包)
#例子19:拖拽(用的不多,需要导入ActionChains包)
import unittest
import time
from selenium import webdriver
 
class VisitSogouByIE(unittest.TestCase):

    def setUp(self):
        #启动浏览器
        self.driver = webdriver.Chrome(executable_path = "E:\\chromedriver")
        #self.driver = webdriver.Firefox(executable_path = "E:\\geckodriver")
        #self.driver = webdriver.Ie(executable_path = "E:\\IEDriverServer")
        
    def test_dragPageElement(self):
        url = "http://jqueryui.com/resources/demos/draggable/scroll.html"
        # 访问被测试网页,这个网站打开的比较慢
        self.driver.get(url)
        time.sleep(10)
        # 获取页面上第一个能拖拽的页面元素
        initialPosition = self.driver.find_element_by_id("draggable")
        # 获取页面上第二个能拖拽的页面元素
        targetPosition = self.driver.find_element_by_id("draggable2")
        # 获取页面上第三个能拖拽的页面元素
        dragElement = self.driver.find_element_by_id("draggable3")

        # 导入提供拖拽元素方法的模块ActionChains
        from selenium.webdriver import ActionChains
        '''
        创建一个新的ActionChains,将webdriver实例对象driver作为参数值传入
        然后通过WebDriver实例执行用户动作。
        '''
        action_chains = ActionChains(self.driver)
        # 将页面上第一个能被拖拽的元素拖拽到第二个元素位置
        action_chains.drag_and_drop(initialPosition, targetPosition).perform()
        time.sleep(3)
        # 将页面上第三个能拖拽的元素,向右下拖动10个像素,共拖动5次
        for i in range(5):
            action_chains.drag_and_drop_by_offset(dragElement, 10, 10).perform()
            time.sleep(2)

    def tearDown(self):
        # 退出IE浏览器
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()
  • (3)键盘操作(只支持IE,keys只能操作特殊的F12等,不能操作abc123等)
#例子20:键盘操作(只支持IE,keys只能操作特殊的F12等,不能操作abc123等)
import unittest
import time
from selenium import webdriver
 
class VisitSogouByIE(unittest.TestCase):

    def setUp(self):
        #启动浏览器
        #self.driver = webdriver.Chrome(executable_path = "E:\\chromedriver")
        #self.driver = webdriver.Firefox(executable_path = "E:\\geckodriver")
        self.driver = webdriver.Ie(executable_path = "E:\\IEDriverServer")
        
    def test_simulateASingleKeys(self):
        url = "http://www.sogou.com"
        # 访问搜狗首页,焦点会自动定位到搜索输入框中
        self.driver.get(url)
        time.sleep(3)
        # 导入模拟按键模块Keys
        from selenium.webdriver.common.keys import Keys
        # 通过id获取搜索输入框的页面元素
        query = self.driver.find_element_by_id("query")
        # 通过WebDriver实例发送一个F12键(打开开发者工具)
        query.send_keys(Keys.F12)
        time.sleep(5)
        # 再次通过WebDriver实例模拟发送一个F12键(取消开发者工具)
        query.send_keys(Keys.F12)
        time.sleep(3)
        # 在搜索输入框中输入"selenium"
        query.send_keys("selenium")
        # 通过WebDriver实例模拟发送一个enter回车键,或者使用query.send_keys(Keys.RETURN)
        query.send_keys(Keys.ENTER)
        time.sleep(3)

    def tearDown(self):
        # 退出浏览器
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()
  • (4)组合键(通过ActionChains包和Keys包操作组合键或者通过操作系统自带的键盘包操作组合键)
#例子21:组合键(通过ActionChains包和Keys包操作组合键或者通过操作系统自带的键盘包操作组合键)
#需要安装pywin32这个包,有两种安装方式:pip install安装,或者使用文件夹里面的那个exe程序进行安装

#方法一:通过ActionChains和Keys操作组合键(仅chrome和ie11的最新版本生效)
import unittest
import time
import chardet
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys

 
class VisitSogouByIE(unittest.TestCase):

    def setUp(self):
        #启动浏览器
        self.driver = webdriver.Chrome(executable_path = "E:\\chromedriver")
        #self.driver = webdriver.Firefox(executable_path = "E:\\geckodriver")
        #self.driver = webdriver.Ie(executable_path = "E:\\IEDriverServer")

    def test_simulationCombinationKeys(self):
        url = "http://www.baidu.com"
        # 访问百度首页
        self.driver.get(url)
        time.sleep(3)
        # 通过xpath找到百度的搜索输入框
        input = self.driver.find_element_by_id("kw")
        input.send_keys(u"北京")
        time.sleep(3)
        # 模拟Ctrl+a组合键
        ActionChains(self.driver).key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).perform()
        time.sleep(3)
        # 模拟Ctrl+x组合键
        ActionChains(self.driver).key_down(Keys.CONTROL).send_keys('x').key_up(Keys.CONTROL).perform()
        time.sleep(3)
        url = "http://sohu.com"
        # 访问搜狗网页
        self.driver.get(url)
        time.sleep(3)
        # 通过xpath找到搜狗的搜索输入框
        self.driver.find_element_by_xpath("//input[@class='search-input left']").click()
        # 模拟Ctrl+V组合键,将从剪切板中获取到的内容粘贴到搜索输入框中
        ActionChains(self.driver).key_down(Keys.CONTROL).send_keys('v').key_up(Keys.CONTROL).perform()
        time.sleep(3)
        # 点击"百度一下"搜索按钮
        self.driver.find_element_by_xpath("//span[@class='search-btn']").click()
        time.sleep(5)

    def tearDown(self):
        # 退出浏览器
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()

#=====================================================================================
#方法二:通过操作系统自带的键盘包进行操作(自定义剪切板的各种方法(设置内容,将内容设置到剪切板中,得到剪切板中的内容),然后进行粘贴)
import time
import unittest
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
import win32clipboard as w
import win32con
import win32api


# 读取剪切板(固定写法)
def getText():
    w.OpenClipboard()
    d = w.GetClipboardData(win32con.CF_TEXT)
    w.CloseClipboard()
    return d

# 设置剪切板内容(固定写法)
def setText(aString):
    w.OpenClipboard()
    w.EmptyClipboard()
    w.SetClipboardData(win32con.CF_UNICODETEXT, aString)
    w.CloseClipboard()
    
# 按键对应的16进制码
VK_CODE ={
    'enter':0x0D,
    'ctrl':0x11,
    'a':0x41,
    'v':0x56,
    'x':0x58
    }

#键盘键按下(固定写法)
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)

class VisitSogouByIE(unittest.TestCase):

    def setUp(self):
        #启动浏览器
        self.driver = webdriver.Chrome(executable_path = "E:\\chromedriver")
        #self.driver = webdriver.Firefox(executable_path = "E:\\geckodriver")
        #self.driver = webdriver.Ie(executable_path = "E:\\IEDriverServer")
        
    def test_copyAndPaste(self):
        url = "https://www.baidu.com"
        # 访问百度首页
        self.driver.get(url)
        time.sleep(3)
        # 定义即将要被设置到剪切板中的内容
        content = u'北京'
        # 将content变量中的内容设置到剪切板中
        setText(content)
        # 从剪切板中获取刚设置到剪切板中的内容
        getContent = getText()
        print ("剪切板中的内容:",getContent.decode("gbk"))
        # 将焦点切换到搜索输入框中
        self.driver.find_element_by_id("kw").click()
        time.sleep(1)
        # 按下Ctrl + v组合键
        keyDown('ctrl')
        keyDown('v')
        # 释放Ctrl + v组合键
        keyUp('v')
        keyUp('ctrl')        
        time.sleep(1)
        # 点击"百度一下"搜索按钮
        self.driver.find_element_by_id('su').click()
        time.sleep(3)

    def tearDown(self):
        # 退出浏览器
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()

#=============================================================================
#方法三:通过操作系统自带的键盘包进行操作(全选输入框中的内容,复制,剪切,粘贴)
import time
import unittest
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
# 导入模拟组合按键需要的包
import win32api
import win32con

#按键对应的16进制码
VK_CODE ={
    'enter':0x0D,
    'ctrl':0x11,
    'a':0x41,
    'v':0x56,
    'x':0x58
    }

#键盘键按下(固定写法)
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)

class VisitSogouByIE(unittest.TestCase):

    def setUp(self):
        #启动浏览器
        self.driver = webdriver.Chrome(executable_path = "E:\\chromedriver")
        #self.driver = webdriver.Firefox(executable_path = "E:\\geckodriver")
        #self.driver = webdriver.Ie(executable_path = "E:\\IEDriverServer")
        
    def test_simulationCombinationKeys(self):
        url = "http://www.sogou.com"
        # 访问搜狗首页
        self.driver.get(url)
        time.sleep(3)
        # 通过id找到搜索输入框元素
        searchBox = self.driver.find_element_by_id("query")
        # 点击搜索输入框
        searchBox.click()
        # 在搜索输入框中输入"北京"
        searchBox.send_keys(u"北京")
        # 稍微等待几秒,防止太快串命令
        time.sleep(3)
        # 模拟Ctrl + a组合键,选中输入框中所有的内容
        keyDown('ctrl')
        keyDown('a')
        # 释放Ctrl + a组合键
        keyUp('a')
        keyUp('ctrl')
        # 模拟Ctrl + x组合键,剪切所选中的内容
        keyDown('ctrl')
        keyDown('x')
        # 释放Ctrl + x组合键
        keyUp('x')
        keyUp('ctrl')
        time.sleep(3)
        # 访问百度首页
        self.driver.get("http://www.baidu.com")
        time.sleep(3)
        # 通过id找到搜索输入框元素,并点击搜索输入框
        self.driver.find_element_by_id("kw").click()
        # 模拟Ctrl + v组合键,进行粘贴
        keyDown("ctrl")
        keyDown("v")
        # 释放Ctrl + v组合键
        keyUp('v')
        keyUp('ctrl')
        # 模拟回车键按下、释放
        keyDown('enter')
        keyUp('enter')
        time.sleep(5)

    def tearDown(self):
        # 退出浏览器
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()

''' 每个键盘对应的16进制码
VK_CODE = {
    'backspace': 0x08,
    'tab': 0x09,
    'clear': 0x0C,
    'enter': 0x0D,
    'shift': 0x10,
    'ctrl': 0x11,
    'alt': 0x12,
    'pause': 0x13,
    'caps_lock': 0x14,
    'esc': 0x1B,
    'spacebar': 0x20,
    'page_up': 0x21,
    'page_down': 0x22,
    'end': 0x23,
    'home': 0x24,
    'left_arrow': 0x25,
    'up_arrow': 0x26,
    'right_arrow': 0x27,
    'down_arrow': 0x28,
    'select': 0x29,
    'print': 0x2A,
    'execute': 0x2B,
    'print_screen': 0x2C,
    'ins': 0x2D,
    'del': 0x2E,
    'help': 0x2F,
    '0': 0x30,
    '1': 0x31,
    '2': 0x32,
    '3': 0x33,
    '4': 0x34,
    '5': 0x35,
    '6': 0x36,
    '7': 0x37,
    '8': 0x38,
    '9': 0x39,
    'a': 0x41,
    'b': 0x42,
    'c': 0x43,
    'd': 0x44,
    'e': 0x45,
    'f': 0x46,
    'g': 0x47,
    'h': 0x48,
    'i': 0x49,
    'j': 0x4A,
    'k': 0x4B,
    'l': 0x4C,
    'm': 0x4D,
    'n': 0x4E,
    'o': 0x4F,
    'p': 0x50,
    'q': 0x51,
    'r': 0x52,
    's': 0x53,
    't': 0x54,
    'u': 0x55,
    'v': 0x56,
    'w': 0x57,
    'x': 0x58,
    'y': 0x59,
    'z': 0x5A,
    'numpad_0': 0x60,
    'numpad_1': 0x61,
    'numpad_2': 0x62,
    'numpad_3': 0x63,
    'numpad_4': 0x64,
    'numpad_5': 0x65,
    'numpad_6': 0x66,
    'numpad_7': 0x67,
    'numpad_8': 0x68,
    'numpad_9': 0x69,
    'multiply_key': 0x6A,
    'add_key': 0x6B,
    'separator_key': 0x6C,
    'subtract_key': 0x6D,
    'decimal_key': 0x6E,
    'divide_key': 0x6F,
    'F1': 0x70,
    'F2': 0x71,
    'F3': 0x72,
    'F4': 0x73,
    'F5': 0x74,
    'F6': 0x75,
    'F7': 0x76,
    'F8': 0x77,
    'F9': 0x78,
    'F10': 0x79,
    'F11': 0x7A,
    'F12': 0x7B,
    'F13': 0x7C,
    'F14': 0x7D,
    'F15': 0x7E,
    'F16': 0x7F,
    'F17': 0x80,
    'F18': 0x81,
    'F19': 0x82,
    'F20': 0x83,
    'F21': 0x84,
    'F22': 0x85,
    'F23': 0x86,
    'F24': 0x87,
    'num_lock': 0x90,
    'scroll_lock': 0x91,
    'left_shift': 0xA0,
    'right_shift ': 0xA1,
    'left_control': 0xA2,
    'right_control': 0xA3,
    'left_menu': 0xA4,
    'right_menu': 0xA5,
    'browser_back': 0xA6,
    'browser_forward': 0xA7,
    'browser_refresh': 0xA8,
    'browser_stop': 0xA9,
    'browser_search': 0xAA,
    'browser_favorites': 0xAB,
    'browser_start_and_home': 0xAC,
    'volume_mute': 0xAD,
    'volume_Down': 0xAE,
    'volume_up': 0xAF,
    'next_track': 0xB0,
    'previous_track': 0xB1,
    'stop_media': 0xB2,
    'play/pause_media': 0xB3,
    'start_mail': 0xB4,
    'select_media': 0xB5,
    'start_application_1': 0xB6,
    'start_application_2': 0xB7,
    'attn_key': 0xF6,
    'crsel_key': 0xF7,
    'exsel_key': 0xF8,
    'play_key': 0xFA,
    'zoom_key': 0xFB,
    'clear_key': 0xFE,
    '+': 0xBB,
    ',': 0xBC,
    '-': 0xBD,
    '.': 0xBE,
    '/': 0xBF,
    '`': 0xC0,
    ';': 0xBA,
    '[': 0xDB,
    '\\': 0xDC,
    ']': 0xDD,
    "'": 0xDE,
    '`': 0xC0
}
'''
  • (5)操作鼠标右键
#例子22:操作鼠标右键
import time
import unittest
from selenium import webdriver
from selenium.webdriver import ActionChains
import win32con
import win32clipboard as w


# 设置剪切板内容(固定写法)
def setText(aString):
    w.OpenClipboard()
    w.EmptyClipboard()
    w.SetClipboardData(win32con.CF_UNICODETEXT, aString)
    w.CloseClipboard()

class VisitSogouByIE(unittest.TestCase):

    def setUp(self):
        #启动浏览器(仅能ie生效)
        #self.driver = webdriver.Chrome(executable_path = "E:\\chromedriver")
        #self.driver = webdriver.Firefox(executable_path = "E:\\geckodriver")
        self.driver = webdriver.Ie(executable_path = "E:\\IEDriverServer")
        
    def test_rigthClickMouse(self):
        url = "http://www.sogou.com"
        # 访问搜狗首页
        self.driver.get(url)
        time.sleep(3)
        # 找到搜索输入框
        searchBox = self.driver.find_element_by_id("query")
        # 点击搜索输入框
        searchBox.click()
        time.sleep(3)
        # 在搜索输入框上执行一个鼠标右键点击操作
        ActionChains(self.driver).context_click(searchBox).perform()
        # 将"北京"数据设置到剪切板中,相当于执行了复制操作
        setText(u'北京')
        time.sleep(3)
        # 发送一个粘贴命令,字符p指代粘贴操作(这个是根据右键中的首字母决定的,可以右键看下)
        ActionChains(self.driver).send_keys('P').perform()
        # 点击搜索按钮
        self.driver.find_element_by_id('stb').click()
        time.sleep(3)

    def tearDown(self):
        # 退出浏览器
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()
  • (6)模拟鼠标左键按下与释放
#例子:模拟鼠标左键按下与释放
import unittest
import time
from selenium import webdriver
from selenium.webdriver import ActionChains


class VisitSogouByIE(unittest.TestCase):

    def setUp(self):
        #启动IE浏览器
        #self.driver = webdriver.Firefox(executable_path = "e:\\geckodriver")
        self.driver = webdriver.Ie(executable_path = "e:\\IEDriverServer")
        
    def test_simulationLeftClickMouseOfProcess(self):
        url = "http://127.0.0.1/test_mouse.html"
        # 访问自定义的html网页
        self.driver.get(url)
        div = self.driver.find_element_by_id("div1")
        # 在id属性值为“div1”的元素上执行按下鼠标左键,并保持
        ActionChains(self.driver).click_and_hold(div).perform()
        time.sleep(2)
        # 在id属性值为“div1”的元素上释放一直点击的鼠标左键
        ActionChains(self.driver).release(div).perform()
        time.sleep(2)
        ActionChains(self.driver).click_and_hold(div).perform()
        time.sleep(2)
        ActionChains(self.driver).release(div).perform()
        time.sleep(2)

    def tearDown(self):
        # 退出IE浏览器
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()
  • (7)保持鼠标悬停在某个元素上
#例子:保持鼠标悬停在某个元素上
import unittest
import time
from selenium import webdriver
from selenium.webdriver import ActionChains

class VisitSogouByIE(unittest.TestCase):

    def setUp(self):
        #启动IE浏览器
        #self.driver = webdriver.Firefox(executable_path = "e:\\geckodriver")
        self.driver = webdriver.Ie(executable_path = "e:\\IEDriverServer")
        
    def test_roverOnElement(self):
        url = "http://127.0.0.1/test_mouse_hover.html"
        # 访问自定义的html网页
        self.driver.get(url)
        # 找到页面上第一个链接元素
        link1 = self.driver.find_element_by_partial_link_text(u"指过来1")
        # 找到页面上第二个链接元素
        link2 = self.driver.find_element_by_partial_link_text(u"指过来2")
        # 找到页面上的p元素
        p = self.driver.find_element_by_xpath("//p")
        print (link1.text, link2.text)
        # 将鼠标悬浮到第一个链接元素上
        ActionChains(self.driver).move_to_element(link1).perform()
        time.sleep(2)
        # 将鼠标从第一个链接元素移动到p元素上
        ActionChains(self.driver).move_to_element(p).perform()
        time.sleep(2)
        # 将鼠标悬浮到第二个链接元素上
        ActionChains(self.driver).move_to_element(link2).perform()
        time.sleep(2)
        # 将鼠标从第二个链接元素移动到p元素上
        ActionChains(self.driver).move_to_element(p).perform()
        time.sleep(2)


    def tearDown(self):
        # 退出IE浏览器
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值