草庐IT

Selenium-鼠标和键盘操作

炫酷的腿毛! 2023-09-02 原文

Selenium-鼠标和键盘操作

1、鼠标操作

常见的鼠标操作有:点击、右击、双击、悬停、拖拽等,对于这些鼠标操作Selenium都封装了相应的操作方法。

1.1 为什么要操作鼠标?

现在Web产品中存在丰富的鼠标交互方式,作为一个Web自动化测试框架,需要应对这些鼠标操作的应用场景。

1.2 鼠标操作的方法

说明:在Selenium中将操作鼠标的方法封装在ActionChains类中 
实例化对象: 
	action = ActionChains(driver) 
方法:
	1. context_click(element) 右击 --> 模拟鼠标右键点击效果 
	2. double_click(element) 双击 --> 模拟鼠标双击效果 
	3. drag_and_drop(source, target) 拖动 --> 模拟鼠标拖动效果 
	4. move_to_element(element) 悬停 --> 模拟鼠标悬停效果 
	5. perform() 执行 --> 此方法用来执行以上所有鼠标操作 


为了更好的学习其他方法,我们先学习perform()执行方法,因为所有的方法都需要执行才能生效

1.3 鼠标执行-perform()

说明:在ActionChains类中所有提供的鼠标事件方法,在调用的时候所有的行为都存储在ActionChains对象中, 
而perform()方法就是真正去执行所有的鼠标事件。

强调:必须调用perform()方法才能执行鼠标事件

1.4 鼠标右击-context_click()

说明:对于点击鼠标右键,如果弹出的是浏览器默认的菜单,Selenium没有提供操作菜单选项的方法; 

	如果是自定义的右键菜单,则可以通过元素定位来操作菜单中的选项。

1.4.1 练习-代码实现关键点分析

# 需求:打开百度,在搜索框上点击鼠标右键

1. 导包:from selenium.webdriver.common.action_chains import ActionChains 
2. 实例化ActionChains对象:action = ActionChains(driver) 
3. 调用右键方法:action.context_click(element) 
4. 执行:action.perform()

# 快速导包: Alt+Enter
# 快速调整格式: Ctrl+Alt+L


# 导包
from selenium import webdriver
from selenium.webdriver import ActionChains

# 获取浏览器驱动对象
driver = webdriver.Firefox()

url = "https://www.baidu.com"
# 实例化 ActionChains对象
action = ActionChains(driver)


driver.get(url)

# 使用CSS id选择器获取搜索框
kw = driver.find_element_by_css_selector("#kw")
# 右击搜索框并执行
action.context_click(kw).perform()

driver.quit()

1.5 鼠标双击-double_click()

说明:模拟双击鼠标左键操作

1.5.1 练习

# 需求:打开百度,在搜索框上输入CSDN,双击鼠标左键,选中CSDN

# 导包
from time import sleep

from selenium import webdriver


# 获取浏览器驱动对象
from selenium.webdriver import ActionChains

driver = webdriver.Firefox()

url = "https://www.baidu.com"
# 实例化 ActionChains对象
action = ActionChains(driver)


driver.get(url)

# 使用CSS id选择器获取搜索框
kw = driver.find_element_by_css_selector("#kw")

# 搜索框中输入CSDN
kw.send_keys("CSDN")

driver.find_element_by_css_selector("[value= '百度一下']").click()
# 双击左键选中CSDN
action.double_click(kw).perform()

sleep(5)
driver.quit()

1.6 鼠标拖拽-drag_and_drop()

说明:模拟鼠标拖动动作,选定拖动源元素释放到目标元素

拖动关键点分析:
	1. 源元素 source = driver.find_element_by_id(xxx) 
	2. 目标元素 target = driver.find_element_by_id(xxx) 
	3. 调用方法 action.drag_and_drop(source, target).perform()

1.7 鼠标悬停-move_to_element()

说明:模拟鼠标悬停在指定的元素上

1.7.1 练习

# 需求:打开百度,在搜索框上输入CSDN,悬停

# 导包
from time import sleep

from selenium import webdriver

# 获取浏览器驱动对象
from selenium.webdriver import ActionChains

driver = webdriver.Firefox()

url = "https://www.baidu.com"
# 实例化 ActionChains对象
action = ActionChains(driver)

driver.get(url)

# 使用CSS id选择器获取搜索框
kw = driver.find_element_by_css_selector("#kw")


move = driver.find_element_by_css_selector('.aging-entry-inner')
# 悬停
action.move_to_element(move).perform()

sleep(5)
driver.quit()

2.键盘操作

思考:如何实现复制、粘贴的操作?

说明:
	1). 模拟键盘上一些按键或者组合键的输入 如:Ctrl+C 、Ctrl+V; 
	2). Selenium中把键盘的按键都封装在Keys类中

2.1 Keys类

导包:from selenium.webdriver.common.keys import Keys

2.2 常用的键盘操作

1. send_keys(Keys.BACK_SPACE) 			删除键(BackSpace) 
2. send_keys(Keys.SPACE) 				空格键(Space) 
3. send_keys(Keys.TAB) 					制表键(Tab) 
4. send_keys(Keys.ESCAPE) 				回退键(Esc) 
5. send_keys(Keys.ENTER) 				回车键(Enter) 
6. send_keys(Keys.CONTROL,'a') 			全选(Ctrl+A) 7. send_keys(Keys.CONTROL,'c') 复制(Ctrl+C) 


提示:以上方法就不一个一个讲解了,因为调用方法都一样;

2.3 案例

需求:打开注册A页面,完成以下操作 
1). 输入用户名:admin1,暂停2秒,删除1 
2). 全选用户名:admin,暂停23). 复制用户名:admin,暂停24). 粘贴到密码框

2.4 示例代码

# 定位用户名 
element = driver.find_element_by_id("userA") 
# 输入用户名 
element.send_keys("admin1") 
# 删除1 
element.send_keys(Keys.BACK_SPACE) 
# 全选 
element.send_keys(Keys.CONTROL, 'a') 
# 复制 
element.send_keys(Keys.CONTROL, 'c') 
# 粘贴
driver.find_element_by_id('passwordA').send_keys(Keys.CONTROL, 'v')

# 导包
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.keys import Keys


# 获取浏览器驱动对象
driver = webdriver.Firefox()
# 打开url
url = r"D:\web自动化素材\课堂素材\注册A.html"
driver.get(url)
"""
    目标:学习使用基于selenium完成键盘操作
    案例:
        1. 输入用户名admin1
        2. 删除 1 
        3. 全选 用户名 "admin"  Ctrl+A
        4. 复制 admin Ctrl+C
        5. 粘贴 将复制的admin粘贴到密码框
    分析:
        1. 导包 Keys
        2. 调用 send_keys(Keys.XXX,'a')
        
"""
# 定位 用户名
username = driver.find_element_by_css_selector("#userA")
# 输入 admin1
username.send_keys("admin1")
sleep(2)
# 删除1
username.send_keys(Keys.BACK_SPACE)

sleep(2)

# 全选 admin Ctrl+a
username.send_keys(Keys.CONTROL, "a")
sleep(2)

# 复制 Ctrl+c
username.send_keys(Keys.CONTROL, "c")
sleep(2)

# 定位密码框 并执行 Ctrl+v
driver.find_element_by_css_selector("#passwordA").send_keys(Keys.CONTROL, "v")

# 暂停 2
sleep(2)
# 关闭驱动对象
driver.quit()

有关Selenium-鼠标和键盘操作的更多相关文章

  1. ruby - 在 Ruby 中用键盘诅咒数组浏览 - 2

    我正在尝试在Ruby中制作一个cli应用程序,它接受一个给定的数组,然后将其显示为一个列表,我可以使用箭头键浏览它。我觉得我已经在Ruby中看到一个库已经这样做了,但我记不起它的名字了。我正在尝试对soundcloud2000中的代码进行逆向工程做类似的事情,但他的代码与SoundcloudAPI的使用紧密耦合。我知道cursesgem,我正在考虑更抽象的东西。广告有没有人见过可以做到这一点的库或一些概念证明的Ruby代码可以做到这一点? 最佳答案 我不知道这是否是您正在寻找的,但也许您可以使用我的想法。由于我没有关于您要完成的工作

  2. 「Python|Selenium|场景案例」如何定位iframe中的元素? - 2

    本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决

  3. ruby - 如何使用 Selenium Webdriver 根据 div 的内容执行操作? - 2

    我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption

  4. ruby-on-rails - 如何处理 Grape 中特定操作的过滤器之前? - 2

    我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?

  5. ruby-on-rails - 在 Ruby on Rails 中发送响应之前如何等待多个异步操作完成? - 2

    在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.

  6. ruby - 在 Ruby 中是否有一种惯用的方法来操作 2 个数组? - 2

    a=[3,4,7,8,3]b=[5,3,6,8,3]假设数组长度相同,是否有办法使用each或其他一些惯用方法从两个数组的每个元素中获取结果?不使用计数器?例如获取每个元素的乘积:[15,12,42,64,9](0..a.count-1).eachdo|i|太丑了...ruby1.9.3 最佳答案 使用Array.zip怎么样?:>>a=[3,4,7,8,3]=>[3,4,7,8,3]>>b=[5,3,6,8,3]=>[5,3,6,8,3]>>c=[]=>[]>>a.zip(b)do|i,j|c[[3,5],[4,3],[7,6],

  7. ruby-on-rails - 如何让 Rails View 返回其关联的操作名称? - 2

    我有一个非常简单的Controller来管理我的Rails应用程序中的静态页面:classPagesController我怎样才能让View模板返回它自己的名字,这样我就可以做这样的事情:#pricing.html.erb#-->"Pricing"感谢您的帮助。 最佳答案 4.3RoutingParametersTheparamshashwillalwayscontainthe:controllerand:actionkeys,butyoushouldusethemethodscontroller_nameandaction_nam

  8. ruby - 下载位置 Selenium-webdriver Cucumber Chrome - 2

    我将Cucumber与Ruby结合使用。通过Selenium-Webdriver在Chrome中运行测试时,我想将下载位置更改为测试文件夹而不是用户下载文件夹。我当前的chrome驱动程序是这样设置的:Capybara.default_driver=:seleniumCapybara.register_driver:seleniumdo|app|Capybara::Selenium::Driver.new(app,:browser=>:chrome,desired_capabilities:{'chromeOptions'=>{'args'=>%w{window-size=1920,1

  9. Postman测试简单操作 - 2

    1、接口请求基本操作1.1例子tips在view的选项可以zoomin调整窗口字帖大小。1、创建一个测试的workspace,并命名为test2、test后面新增一个addrequest3、选择发送GET,URL为一个开源的https://api.apiopen.top/api/sentences获取每日一句4、点击send查看内容Tips:如果提示出现Error:tunnelingsocketcouldnotbeestablished,statusCode=407错误,参照以下解决办法)关于tunnelingsocketcouldnotbeestablished,cause=getaddri

  10. 【Linux操作系统】——网络配置与SSH远程 - 2

    Linux操作系统——网络配置与SSH远程安装完VMware与系统后,需要进行网络配置。第一个目标为进行SSH连接,可以从本机到VMware进行文件传送,首先需要进行网络配置。1.下载远程软件首先需要先下载安装一款远程软件:FinalShell或者xhell7FinalShellxhell7FinalShell下载:Windows下载http://www.hostbuf.com/downloads/finalshell_install.exemacOS下载http://www.hostbuf.com/downloads/finalshell_install.pkg2.配置CentOS网络安装好

随机推荐