3:操作元素(模拟鼠标和键盘操作)

本文详细介绍使用Selenium进行自动化测试的实战操作,包括鼠标和键盘的基本操作,如点击、清空输入框、输入字符串等,以及如何使用键盘快捷键和鼠标悬停、双击、右击等高级操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

鼠标和键盘操作,常用的大致有下面几种
**
先来一段基础代码

from selenium import webdriver #引入驱动模块
import time
from selenium.webdriver.common.action_chains import ActionChains #引入鼠标模块
from selenium.webdriver.common.keys import Keys #引入键盘模块

driver=webdriver.Firefox() #引入火狐浏览器的驱动
driver.implicitly_wait(10) #引入隐式等待
driver.get("http://www.baidu.com")#请求的url
element_kw=driver.find_element("id", "kw")
element_su=driver.find_element("id", "su")

# 输入字符串 
element_kw.send_keys("python")
time.sleep(1)
# 清空输入框
element_kw.clear()
time.sleep(1)
# 输入中文字符串
element_kw.send_keys(u"自动化")
time.sleep(1)
# 点击
element_su.click()
time.sleep(1)

#鼠标悬停
element_shezhi=driver.find_element("link text", u"设置")
ActionChains(driver).move_to_element(element_shezhi).perform()

time.sleep(1)
driver.quit()

常用的

**
1:点击
click()
2:清空输入框
clear()
3:输入字符串
send_keys("python")
   输入中文字符串
send_keys(u"自动化")
4:提交表单(模拟回车)
Submit()

关于键盘的

导入键盘模块

	from selenium.webdriver.common.keys import Keys

    键盘F1到F12:send_keys(Keys.F1) 
    复制Ctrl+C:send_keys(Keys.CONTROL,'c') 
    粘贴Ctrl+V:send_keys(Keys.CONTROL,'v') 
    全选Ctrl+A:send_keys(Keys.CONTROL,'a') 
    剪切Ctrl+X:send_keys(Keys.CONTROL,'x') 
    制表键Tab:  send_keys(Keys.TAB) 

关于鼠标的

导入鼠标模块

from selenium.webdriver.common.action_chains import ActionChains

1:悬停
element_shezhi=driver.find_element("link text", u"设置")
ActionChains(driver).move_to_element(element_shezhi).perform()

perform() 执行所有ActionChains中的行为
move_to_element() 鼠标悬停

2:双击
ActionChains(driver).double_click(XXX).perform()
3:右击
ActionChains(driver).context_click(XXX).perform()

最后一点

如果有关于自动化的问题,或者作者粗心大意导致内容有问题,在评论里提出,我会尝试着一起解决下。
如果哪些写的不够详细,也请指出来,作者慢慢补充。

模拟鼠标键盘 注意:不支持Windows 8 / 8.1。 Interceptor是Windows键盘驱动程序的包装器(包装http://oblita.com/Interception)。 使用驱动程序,Interceptor可以模拟按键鼠标点击... 使用DirectX的游戏,通常不接受使用SendInput()的击键 Windows的受保护区域,如Windows登录屏幕或UAC调暗屏幕 任何应用程序 因为驱动程序模拟击键鼠标单击,所以目标窗口必须处于活动状态(即,在发送击键鼠标点击时,不能在另一个窗口上执行多任务)。 如何使用 下载并构建此项目并在项目中引用其DLL。 下载'interception.dll',这是一个由驱动程序作者编写的独立库。将它放在与可执行文件相同的目录中。这是必需的。 从作者的网页下载并安装“install-interception.exe”。安装后重新启动计算机。 在您的代码中,要加载驱动程序,请调用(阅读下面的代码注释;您必须设置过滤模式以捕获按键事件或发送按键操作!): Input input = new Input(); // Be sure to set your keyboard filter to be able to capture key presses and simulate key presses // KeyboardFilterMode.All captures all events; 'Down' only captures presses for non-special keys; 'Up' only captures releases for non-special keys; 'E0' and 'E1' capture presses/releases for special keys input.KeyboardFilterMode = KeyboardFilterMode.All; // You can set a MouseFilterMode as well, but you don't need to set a MouseFilterMode to simulate mouse clicks // Finally, load the driver input.Load(); 做你的东西。 input.MoveMouseTo(5, 5); // Please note this doesn't use the driver to move the mouse; it uses System.Windows.Forms.Cursor.Position input.MoveMouseBy(25, 25); // Same as above ^ input.SendLeftClick(); input.KeyDelay = 1; // See below for explanation; not necessary in non-game apps input.SendKeys(Keys.Enter); // Presses the ENTER key down and then up (this constitutes a key press) // Or you can do the same thing above using these two lines of code input.SendKeys(Keys.Enter, KeyState.Down); Thread.Sleep(1); // For use in games, be sure to sleep the thread so the game can capture all events. A lagging game cannot process input quickly, and you so you may have to adjust this to as much as 40 millisecond delay. Outside of a game, a delay of even 0 milliseconds can work (instant key presses). input.SendKeys(Keys.Enter, KeyState.Up); input.SendText("hello, I am typing!"); /* All these following characters / numbers / symbols work */ input.SendText("abcdefghijklmnopqrstuvwxyz"); input.SendText("1234567890"); input.SendText("!@#$%^&*()"); input.SendText("[]\\;',./"); input.SendText("{}|:\"?"); // And finally input.Unload(); 笔记: BadImageFormatException如果您没有为解决方案中的所有项目(包括此项目)使用正确的体系结构(x86或x64),则可能会获得。因此,您可能必须下载此项目的源代码才能将其重建为正确的体系结构。这应该很简单,构建过程应该没有错误。 您必须从http://oblita.com/Interception下载'interception.dll' 。 如果你已经完成了以上所有操作(正确安装了拦截驱动程序,将interception.dll放在你的项目文件夹中),你仍然无法发送击键: 驱动程序有一个限制,即它不能在不接收至少一次击键的情况下发送击键。这是因为驱动程序不知道键盘是哪个设备ID,因此它必须等待接收击键以从击键中推断出设备ID。 总之,在发送击键之前,请始终按键盘一次。点按任意键。然后你可以发送击键。这不适用于接收击键,因为通过接收击键,您当然已经按下了一个键。 MoveMouseTo()MoveMouseBy()完全忽略键盘驱动程序。它使用System.Windows.Forms.Position来设置获取游标的位置(它为下面的各个函数调用标准的Win32 API)。 原因是,在探索键盘驱动程序的鼠标移动功能时,我注意到它没有按像素单位移动光标,而是似乎通过加速移动光标。当我想将光标移动到某个位置时,这会不断产生不一致的值。因为Win32游标设置API通常不被游戏等阻止,所以我发现只需调用这些标准API即可,而无需使用驱动程序。请注意,这仅适用于设置光标位置。拦截光标仍然可以正常工作。例如,您可以使用Interceptor反转鼠标的xy轴。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值