上一篇文档我们讲述了如何在页面中查找定位元素,一共介绍了 8 中方法。在这一篇文档中我们更进一步,掌握操作元素的一些方法。其实在上一篇文档中我们已经接触过两个方法了,比如说 send_keys 方法是用来在元素中输入文本内容的,而 click 方法是用来模拟鼠标单击某个元素的。

浏览器或者标签页相关的操作

下面表格中的是对浏览器或者浏览器标签页的一些操作:

方法名称 示例 描述
title driver.title 获取浏览器标签页的标题
refresh driver.refresh() 刷新页面
back() driver.back() 返回上一页
forward() driver.forward() 前进到下一页
quit() driver.quit() 退出浏览器
maximize_window() driver.maximize_window() 最大化浏览器窗口
minimize_window() driver.minimize_window() 最小化浏览器窗口
current_window_handle driver.current_window_handle 获取当前窗口的标识:如 CDwindow-488DEF6F588FF2AC150E17CB4BA97564
current_url driver.current_url 获取当前窗口的 URL

常见的控件的操作

所谓的基本方法指的是,大部分元素都拥有的方法,如下表所示:

方法名称 示例 描述
send_keys() inputElement.send_keys("Hello World") 在 input 文本框中输入“Hello World”字符串
text divElement.text 返回 div 元素的文本内容
get_attribute() element.get_attribute("id") 返回 div 元素中的指定属性的值
is_selected() redioOption.is_selected() 返回元素是否被选择,一般用于选择框·
is_enabled() button.is_enabled() 返回按钮元素是否启用,比如说有时候 button 是置灰状态
is_displayed() image.is_displayed() 返回图片是否显示在页面中,比如说有时候 image 是临时隐藏的
clear() inputElement.clear() 清除输入框的值

我们挑几个举例说明,比如说 is_selected() 方法。我们先构造 HTML 代码如下:

<label> Do You speak Chinese?
	<input type="radio" name="speak" value="Yes" checked />Yes
	<input type="radio" name="speak" value="No" />No
</label>

接着,我们来写一个脚本,判断 type 属性为 radio 并且 value 属性为 Yes 的选项是否被选中,换句话说用户是否选择了会说中文:

from selenium import webdriver
driver = webdriver.Chrome()
driver.get(r"C:\Users\JinZhiHomePC\PycharmProjects\SeleniumDemo\html\index.html")
radioOption = driver.find_element_by_css_selector("input[type=radio][value=Yes]")
print(radioOption.is_selected())		# 输出 Yes, 因为这个选项默认是选中的

再比如说清除输入框的值:

<input type="text" value="default">

然后,一句代码清除其默认值:

driver.find_element_by_tag_name("input").clear()

鼠标相关的操作

下面表格中罗列了鼠标相关的操作:

操作 示例 描述
click() btn.click() 鼠标单击按钮元素
click_and_hold() btn.click_and_hold() 鼠标单击并且按住不放
double_click() btn.double_click() 鼠标双击
content_click() bodyElement.content.click() 鼠标右击操作
drag_and_drop() element.drag_and_drop() 鼠标拖动元素,比如说拖动排序的场景
key_down() element.key_down() 按住某个键,实现快捷键操作
key_up() element.key_up() 松开某个键
move_to_element() element.move_to_element() 鼠标移动到页面上指定的一个元素
move_to_element_with_offset element.move_to_element_with_offset() 移动鼠标到页面的指定坐标
perform() element.perform() 鼠标悬停操作

下面这个实验模拟了鼠标单击按钮。先来写 HTML:

<button id="clickMe">Click Me</button>

然后我们来写 JavaScript,模拟按钮被单击之后的触发的事件,即弹出弹窗:

window.onload = function () {
	let clickMe = document.getElementById('clickMe');
	clickMe.onclick = function () {
		alert("clicked me!");
	}
}

最后,我们来写脚本,自动寻找这个按钮,并单击它,你能看到出现了一个弹窗:

driver.find_element_by_id("clickMe").click()

然后我们再来看看如何对选择框进行操作。先写 HTML 代码:

<select name="languages" id="languages">
    <option value="PHP">PHP</option>
    <option value="Java">Java</option>
    <option value="Python">Python</option>
</select>

然后呢?我们来编写脚本,实现将鼠标移动到这个选择框上并悬停,之后使用 Select 对象来选择第二项,也就是 Python,因为下标从 0 开始:

selectElement = driver.find_element_by_tag_name("select")			# 找到 select 元素
ActionChains(driver).move_to_element(selectElement).perform()		# 鼠标移动到这个元素上去并悬停
time.sleep(2)									# 悬停三秒
Select(selectElement).select_by_index(2)		# 选择第 2 项,即 Python,因为下表从 0 开始

需要注意的是,除了 select_by_index 之外,还提供了 select_by_value 以及 select_by_visible_value 这两个方法,自行尝试。

常用的键盘事件

在自动化测试中,经常需要使用键盘和网页发生交互,比如说回车之后自动登录。一些常用的键盘事件如下表所示:

事件 描述
Keys.BACK_SPACE 删除键
Keys.SPACE 空格键
Keys.TAB TAB 键
Keys.ESCAPE 回退键
Keys.ENTER 回车键
Keys.CONTROL,“a” CTRL + A,或者其他字母,比如 x,v,c 等等
Kyes.F1 F1 键,或者其他的功能键,比如说 F10,  F12

举例说明,比如页面上有一个文本框:

<input type="text">

我需要实现,在打开页面之后,将光标定位到这个文本框中去:

driver.find_element_by_tag_name("body").send_keys(Keys.TAB)
最后更新于:
2021.04.06