在之前的文章里,我们一起学习了定位方式、等待机制等内容。相信通过之前的学习,你已经掌握了WEB自动化的一些入门知识,具备了编写代码的一些基础知识和能力。这篇文章,让我们一起学习一下模拟键盘事件。
在实际的项目当中,有的时候,我们需要利用到键盘的一些快捷键对网页进行操作,或点击一些浏览器中的辅助功能,这个时候,我们就要用到键盘事件,编写相应的代码实现模拟键盘的操作。
这篇文章共分四个小阶段(四篇文章),我将会为大家进行分解,方便大家的查阅,提升阅读体验。
1、了解元素交互的常用方法(本节目标)
2、学习如何对多选元素进行操作(本节目标)
3、学习模拟鼠标进行相关操作
4、学习模拟键盘进行相关操作
在selenium的官方文档中,介绍了五种基本命令可用于元素的操作。selenium官方中文文档地址:selenium官方文档
下面我们一起来学习:1、点击 (适用于任何元素);2、发送键位 (仅适用于文本字段和内容可编辑元素);3、清除 (仅适用于文本字段和内容可编辑元素);4、提交 (仅适用于表单元素);5、选择 (参见 选择列表元素)
这些方法的设计目的是尽量模拟用户体验, 所以, 与 Actions接口 不同, 在指定制定操作之前,会尝试执行两件事。
元素点击命令执行在元素中央. 如果元素中央由于某些原因被遮挡 , Selenium将返回一个元素点击中断错误。
#导包
from selenium import webdriver
# 初始化浏览器驱动
driver = webdriver.Chrome()
username = "18894687777" # 设置用户名
password = "123456" # 设置密码
driver.get("http://csdnadmin/login.com/") # 打开项目网址
# 点击登陆按钮
driver.find_element(By.XPATH, "//*[@id='btnSearch']").click()
元素发送键位命令 将录入提供的键位到可编辑的 元素. 通常, 这意味着元素是具有文本类型的表单的输入元素或具有内容可编辑属性的元素。如果不可编辑, 则返回 无效元素状态错误。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get("http://www.google.com")
#模拟键盘事件-回车键操作,表示确定
driver.find_element(By.NAME, "q").send_keys("测试文字" + Keys.ENTER)
元素清除命令重置元素的内容,这要求元素可编辑, 且可重置通常, 这意味着元素是具有文本类型的表单的输入元素或具有 内容可编辑属性的元素. 如果不满足这些条件, 将返回无效元素状态错误。
el = driver.find_element(By.XPATH, "//input[@name='searchKey']")
el.send_keys("大王")
sleep(3)
#清除操作
el.clear()
在Selenium 4中, 不再通过单独的端点以及脚本执行的方法来实现.。因此, 建议不要使用此方法, 而是单击相应的表单提交按钮。可以忽略,此处不做讲解。
1、如何访问本地化的html文件?
头部给出 – file://
尾部给出 – 系统中的绝对路径
2、与其他元素相比,选择列表具有特殊的行为。选择元素可能需要大量样板代码(boilerplate code)才能自动化. 为了减少这种情况并使您的测试更简洁, 在Selenium的support包中有一个 Select 类。
#导包
from selenium import webdriver
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
# 创建一个select对象
select_element = driver.find_element(By.ID, 's1Id')
select_object = Select(select_element)
sleep(3)
#有三种方法可以选择选项
#选项索引
select_object.select_by_index(1)
sleep(3)
#选项value属性值
select_object.select_by_value('o3')
sleep(3)
#选项文本
select_object.select_by_visible_text('o3')
sleep(3)
#检查所有被选择的选项
all_selected_options = select_object.all_selected_options
print("=======检查所有被选择的选项========")
print(all_selected_options
#返回列表中第一个被选择的选项
first_selected_option = select_object.first_selected_option
print("=======返回列表中第一个被选择的选项========")
print(first_selected_option)
#返回列表的所有选项
all_available_options = select_object.options
print("=======返回列表的所有选项========")
print(all_available_options)
# ==========有四种方法可以取消选择,仅适用于多选列表==========
#创建一个多选select对象
select_element = driver.find_element(By.XPATH, "//*[@multiple='multiple']")
select_multiple_object = Select(select_element)
select_multiple_object.select_by_index(3)
select_multiple_object.select_by_index(1)
sleep(3)
# 确定是否允许多选
does_this_allow_multiple_selections = select_multiple_object.is_multiple
print("==========确定是否允许多选==========")
print(does_this_allow_multiple_selections)
#选项索引
select_multiple_object.deselect_by_index(3)
#选项value属性值
select_multiple_object.deselect_by_value('o1val')
#选项文本
select_multiple_object.deselect_by_visible_text('o3')
#取消所有被选择的选项
select_multiple_object.deselect_all()