selenium--键盘操作

简介: selenium--键盘操作

前戏


上篇文章说了selenium里的鼠标事件,在自动化中,键盘事件也是非常重要的,比如我们需要按回车键,ctrl+c复制等等操作,都离不开键盘事件,在selenium中,提供了Keys方法来供我们操作键盘


Keys


使用键盘完成复制,剪切,粘贴的功能

# 在百度搜索框输入  python ,复制粘贴搜狗输入框进行搜索
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from time import sleep
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
driver.find_element_by_css_selector('#kw').send_keys('python')
sleep(2)
driver.find_element_by_css_selector('#kw').send_keys(Keys.CONTROL, 'a')  # 全选
driver.find_element_by_css_selector('#kw').send_keys(Keys.CONTROL, 'c')  # 复制
driver.find_element_by_css_selector('#kw').send_keys(Keys.CONTROL, 'x')  # 剪切
sleep(2)
driver.get('http://www.sogou.com')
driver.find_element_by_css_selector('.sec-input').send_keys(Keys.CONTROL, 'v')  # 粘贴
sleep(2)
driver.find_element_by_css_selector('#stb').click()
sleep(2)
driver.quit()

常用的按键

View Code

 

例子2

from selenium import webdriver
import unittest, time
from selenium.webdriver.common.keys import Keys
class Test_dragpage(unittest.TestCase):
    def test_dragpageElement(self):
        url = 'http://www.sogou.com'
        self.driver = webdriver.Chrome()
        self.driver.get(url)
        self.driver.maximize_window()
        query = self.driver.find_element_by_id('query')
        # 通过WebDriver发送一个f12键
        query.send_keys(Keys.F12)
        time.sleep(5)
        # 在按次f12
        query.send_keys(Keys.F12)
        query.send_keys('selenium')
        # 按回车
        query.send_keys(Keys.ENTER)
time.sleep(3)
test1 = Test_dragpage()
test1.test_dragpageElement()


通过WebDriver内建的模块模拟组合键


from selenium import webdriver
import unittest, time
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
class Test_dragpage(unittest.TestCase):
    def test_dragpageElement(self):
        url = 'http://www.baidu.com'
        self.driver = webdriver.Chrome()
        self.driver.get(url)
        input = self.driver.find_element_by_id('kw')
        input.send_keys('python')
        ActionChains(self.driver).key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).perform()
        time.sleep(2)
        ActionChains(self.driver).key_down(Keys.CONTROL).send_keys('x').key_up(Keys.CONTROL).perform()
        self.driver.get(url)
        self.driver.find_element_by_id('kw').click()
        ActionChains(self.driver).key_down(Keys.CONTROL).send_keys('v').key_up(Keys.CONTROL).perform()
        self.driver.find_element_by_id('su').click()
test1 = Test_dragpage()
test1.test_dragpageElement()

ActionChains(self.driver).key_down(Keys.CONTROL).send_keys('v').key_up(Keys.CONTROL).perform(),这行代码中,key_down(Keys.CONTROL)表示按下ctrl键,send_keys('v')类似模拟了V键,组合起来就是Ctrl+v,而key_down(Keys.CONTROL)表示释放Ctrl键


通过第三方库进行操作


需要安装pywin32

键盘映射表

View Code

 

import win32api
import win32con
class KeyboardKeys(object):
    #模拟键盘按键类
    VK_CODE={
        'enter':0x0D,
        'ctrl':0x11,
        'v':0x56
    }
    @staticmethod
    def keyDown(keyName):
        #按下按键
        win32api.keybd_event(KeyboardKeys.VK_CODE[keyName],0,0,0)
    @staticmethod
    def keyUp(keyName):
        #释放按键
        win32api.keybd_event(KeyboardKeys.VK_CODE[keyName],0,win32con.KEYEVENTF_KEYUP,0)
    @staticmethod
    def oneKey(key):
        #模拟单个按键
        KeyboardKeys.keyDown(key)
        KeyboardKeys.keyUp(key)
    @staticmethod
    def twoKeys(key1,key2):
        #模拟两个组合键
        KeyboardKeys.keyDown(key1)
        KeyboardKeys.keyDown(key2)
        KeyboardKeys.keyUp(key2)
        KeyboardKeys.keyUp(key1)

Keybd_event()共有四个参数:

第一个为按键的虚拟键值,如回车键为vk_return, tab键为vk_tab(其他具体的参见附录:常用模拟键的键值对照表);

第二个参数为扫描码,一般不用设置,用0代替就行;

第三个参数为选项标志,如果为keydown则置0即可,如果为keyup则设成"KEYEVENTF_KEYUP";

第四个参数一般也是置0即可。


调用

KeyboardKeys.oneKey('enter')


设置剪贴板


在进行自动化的时候,有时候要上传一个文件,这时会打开一个wins的窗口,但是selenium没有给我们提供操作wins窗口的方法,我们就要使用pywin32提供给我们的方法来操作

import win32clipboard as w
import win32con
class Clipboard(object):
    #模拟windows设置剪贴板
    #读取剪贴板
    @staticmethod
    def getText():
        #打开剪贴板
        w.OpenClipboard()
        #获取剪贴板中的数据
        d=w.GetClipboardData(win32con.CF_TEXT)
        #关闭剪贴板
        w.CloseClipboard()
        #返回剪贴板数据给调用者
        return d
    #设置剪贴板内容
    @staticmethod
    def setText(aString):
        #打开剪贴板
        w.OpenClipboard()
        #清空剪贴板
        w.EmptyClipboard()
        #将数据aString写入剪贴板
        w.SetClipboardData(win32con.CF_UNICODETEXT,aString)
        #关闭剪贴板
        w.CloseClipboard()


调用


Clipboard.setText(filePath)

相关文章
|
5月前
|
前端开发 测试技术 UED
使用Selenium WebDriver模拟用户操作防止滑动条验证
在进行Web自动化测试时,经常会遇到各种前端验证机制,如滑动条验证,这些机制设计用来防止自动化脚本模拟用户行为。在本文中,我们将探讨如何使用Selenium WebDriver来模拟用户操作,以规避这些验证机制。
|
6月前
|
Java 测试技术 Python
《手把手教你》系列技巧篇(三十六)-java+ selenium自动化测试-单选和多选按钮操作-番外篇(详解教程)
【4月更文挑战第28天】本文简要介绍了自动化测试的实战应用,通过一个在线问卷调查(<https://www.sojump.com/m/2792226.aspx/>)为例,展示了如何遍历并点击问卷中的选项。测试思路包括找到单选和多选按钮的共性以定位元素,然后使用for循环进行点击操作。代码设计方面,提供了Java+Selenium的示例代码,通过WebDriver实现自动答题。运行代码后,可以看到控制台输出和浏览器的相应动作。文章最后做了简单的小结,强调了本次实践是对之前单选多选操作的巩固。
67 0
|
5月前
python+Pycharm+selenium操作浏览器(Chorme或Edge)
python+Pycharm+selenium操作浏览器(Chorme或Edge)
155 1
|
5月前
|
数据采集 Web App开发 前端开发
Selenium:自动化Web浏览器操作的强大工具
**Selenium** 是一款用于自动化Web应用测试和模拟用户行为的工具,支持多种浏览器和编程语言。安装包括安装Selenium库和对应浏览器的WebDriver。基本用法包括导入库、启动浏览器、查找与操作页面元素、等待元素加载及关闭浏览器。在实际项目中,Selenium常用于Web测试、爬虫、自动化表单填写等,优点是跨平台、模拟真实用户行为,但性能较低且依赖浏览器。
221 9
|
6月前
|
JavaScript 前端开发 Java
《手把手教你》系列技巧篇(四十九)-java+ selenium自动化测试-隐藏元素定位与操作(详解教程)
【5月更文挑战第13天】本文主要讨论了在Selenium自动化测试中如何处理前端隐藏元素的问题。隐藏元素通常是通过`type="hidden"`或`style="display: none;"`属性实现的,它们在页面上不可见,但仍然存在于HTML代码中。Selenium可以定位到这些隐藏元素,但无法直接进行点击、输入等操作,会报错“ElementNotInteractableException”。
109 3
|
6月前
|
JavaScript 前端开发 测试技术
《手把手教你》系列技巧篇(四十八)-java+ selenium自动化测试-判断元素是否可操作(详解教程)
【5月更文挑战第12天】本文介绍了WebDriver中用于判断元素状态的三个方法:`isEnabled()`、`isSelected()`和`isDisplayed()`。`isSelected()`检查元素是否被选中,通常用于勾选框。`isDisplayed()`则用来判断元素是否在页面上可见。`isEnabled()`方法确定元素是否可操作,例如是否能点击或输入内容。
121 1
|
6月前
|
数据采集 前端开发 测试技术
《手把手教你》系列技巧篇(三十一)-java+ selenium自动化测试- Actions的相关操作-番外篇(详解教程)
【4月更文挑战第23天】本文介绍了网页中的滑动验证码的实现原理和自动化测试方法。作者首先提到了网站的反爬虫机制,并表示在本地创建一个没有该机制的网页,然后使用谷歌浏览器进行验证。接着,文章详细讲解了如何使用WebElement的click()方法以及Action类提供的API来模拟鼠标的各种操作,如右击、双击、悬停和拖动。
43 2
|
6月前
|
Web App开发 数据采集 Java
《手把手教你》系列技巧篇(三十)-java+ selenium自动化测试- Actions的相关操作下篇(详解教程)
【4月更文挑战第22天】本文介绍了在测试过程中可能会用到的两个功能:Actions类中的拖拽操作和划取字段操作。拖拽操作包括基本讲解、项目实战、代码设计和参考代码,涉及到鼠标按住元素并将其拖动到另一个元素上或指定位置。划取字段操作则介绍了如何在一段文字中随机选取一部分,包括项目实战、代码设计和参考代码。此外,文章还提到了滑动验证的实现,并提供了相关的代码示例。
81 2
|
6月前
|
存储 前端开发 测试技术
《手把手教你》系列技巧篇(三十五)-java+ selenium自动化测试-单选和多选按钮操作-下篇(详解教程)
【4月更文挑战第27天】本文介绍了使用Java+Selenium进行Web自动化测试时,如何遍历和操作多选按钮的方法。文章分为两个部分,首先是一个本地HTML页面的示例,展示了多选按钮的HTML代码和页面效果,并详细解释了遍历多选按钮的思路:找到所有多选按钮的共同点,通过定位这些元素并放入list容器中,然后使用for循环遍历并操作。 第二部分介绍了在JQueryUI网站上的实战,给出了被测网址,展示了代码设计,同样使用了findElements()方法获取所有多选按钮并存储到list中,然后遍历并进行点击操作。最后,文章对整个过程进行了小结,并推荐了作者的其他自动化测试教程资源。
63 0
|
6月前
|
前端开发 测试技术 Python
《手把手教你》系列技巧篇(三十三)-java+ selenium自动化测试-单选和多选按钮操作-上篇(详解教程)
【4月更文挑战第25天】本文介绍了自动化测试中如何处理单选和多选按钮的操作,包括它们的定义、HTML代码示例以及如何判断和操作这些元素。文章通过一个简单的HTML页面展示了单选和多选框的示例,并提供了Java+Selenium实现的代码示例,演示了如何检查单选框是否选中以及如何进行全选操作。
72 0