上一篇文档我们讲述了如何在页面中查找定位元素,一共介绍了 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