飞道的博客

【Selenium】Selenium自动化入门之操作元素与句柄

360人阅读  评论(0)

前文说了怎么定位元素,接下里的就是怎么通过获取的元素来进行模拟键鼠操作,并告诉大家selenium工具中的特殊操作多窗口和句柄

本文纯属文本笔记分享,需要这次知识的视频教程的小伙伴可以点击并输入暗号:CSDN

书接上文:【Selenium】Selenium自动化入门之CSS定位
appium篇:【appium】appium自动化入门之环境搭建(上)

2.6 操作元素(键盘和鼠标事件)

前言

在前面的几篇中重点介绍了一些元素的到位方法,到位到元素后,接下来就是需要操作元素了。本篇总结了 web 页面常用的一些操作元素方法,可以统称为行为事件有些 web 界面的选项菜单需要鼠标悬停在某个元素上才能显示出来(如百度页面的设置按钮)。

2.6.1 简单操作

  1. 点击(鼠标左键)页面按钮:click()

  2. 清空输入框:clear()

  3. 输入字符串:send_keys()

  4. send_keys()如果是发送中文的,前面需加 u,如:u"中文",因为这里是输入到 windows 系统了,windows 系统是 GBK 编码,我们的脚本是 utf-8,需要转码为 Unicode 国际编码,返样才能识删到。

# coding :utf-8
from selenium import webdriver

duiver = webdriver.Firefox()
driver.get("https://www.baidu.com")
# inmlicitly_wait是隐式等待,作用全局的
driver.implicitly_wait(10)
driver.find_element_by_id("kw").clear()
# sen _keys里如果是中文的话,前面加u
driver.find_element_by_id("kw").send_keys(u"测试")
driver.find_element_by_id("su").click()

2.6.2 submit 提交表单

  1. 在前面百度搜索案例中,输入关键字后,可以直接按回车键搜索,也可以点搜索按钮
    搜索。
  2. submit()一般用于模拟回车键
# coding :utf-8
from selenium import webdriver
inport random
duiver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.implicitly_wait(10)
driver.find_element_by_id("kw").send_keys(u"软件测试")
# submint()模拟enter键提交表单

2.6.3 键盘操作

  1. selenium 提供了一整套的模拟键盘操作事件,前面 submit()方法如果不行的话,可
    以试试模拟键盘事件
  2. 模拟键盘的操作需要先导入键盘模块:from selenium.webdriver.common.keys
    import Keys
  3. 模拟 enter 键,可以用 send_keys(Keys.ENTER)
# coding :utf-8
from selenium import webdriver
inport random
duiver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.implicitly_wait(10)
driver.find_element_by_id("search-button").click()
driver.find_element_by_id("search-term").clear()
driver.find_element_by_id("searcj-term").send_keys("seleniu")
# 模拟enter键操作回车按钮
driver.find_element_by_id("search-term").send_keys(Keys.ENTER)

4.其它常见的键盘操作:

  1. 键盘 F1 到 F12:send_keys(Keys.F1) 把 F1 改成对应的快捷键
  2. 复刢 Ctrl+C:send_keys(Keys.CONTROL,‘c’)
  3. 粘贴 Ctrl+V:send_keys(Keys.CONTROL,‘v’)
  4. 全选 Ctrl+A:send_keys(Keys.CONTROL,‘a’)
  5. 剪切 Ctrl+X:send_keys(Keys.CONTROL,‘x’)
  6. 列表键 Tab: send_keys(Keys.TAB)

这里只是列了一些常用的,当然除了键盘事件,也有鼠标事件

2.6.4 鼠标悬停事件

  1. 鼠标不仅仅可以点击(click),鼠标还有其它的操作,如:鼠标悬停在某个元素上,鼠标
    点击,鼠标按住某个按钮拖栋
  2. 鼠标事件需要先导入模块:from selenium.webdriver.common.action_chains

import ActionChains

perform() 执行所有 ActionChains 中的行为

move_to_element() 鼠标悬停

  1. 这里以百度页面设置按钮为例
# coding :utf-8
from selenium import webdriver
inport random
duiver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.implicitly_wait(10)
# 鼠标悬停在搜索设置按钮上
mouse = driver.find_element_by_link_text("设置")
ActionChains(driver).move_to_element(mouse).perform()
  1. 除了常用的鼠标悬停事件外,还有

右击鼠标:context_click()

双击鼠标:double_click()

依葫芦画瓢,替换上面案例中对应的鼠标事件就可以了

selenium 提供了一整套完整的鼠标和键盘行为事件,功能还是蛮强大滴。

2.7 多窗口、句柄(handle)

前言

有些页面的链接打开后,会重新打开一个窗口,对亍这种情况,想
在新页面上操作,就得先切换窗口了。获取窗口的唯一标识用句柄表示,
所以叧需要切换句柄,我们就能在多个页面上灵活自如的操作了。

2.7.1 认识多窗口

  1. 打开赶集网:http://bj.ganji.com/,点击招聘求职按钮会发现右边多了一个窗口标签

2.我们用代码去执行点击的时候,发现界面上出现两个窗口,如下
图这种情况就是多窗口了。

3.到这里估计有小伙伴纳闷了,手工点击是 2 个标签,怎么脚本点
击就变成 2 个窗口了,这个在 2.1 里面讲过,脚本执行是不加载配置的,
手工点击是浏览器默认设置了新窗口打开方式为标签,这里用鼠标按住
点二个标签,拖拽出来,也就变成 2 个窗口了,是一回事。

2.7.2 获取当前窗口句柄

  1. 元素有属性,浏览器的窗口其实也有属性的,只是你看不到,浏览器窗口的属性用句柄(handle)来识别。
  2. 人为操作的话,可以通过眼睛看,识别不同的窗口点击切换。但是脚本没长眼睛,它不知道你要操作哪个窗口,这时候只能句柄来判断了。
  3. 获取当前页面的句柄:driver.current_window_handle
# coding :utf-8
from selenium import webdriver
inport random
duiver = webdriver.Firefox()
driver.get("https://bj.ganji.com")
driver.implicitly_wait(10)
# 获取当前窗口句柄
h = driver.current_window_handle
print h

2.7.3 获取所有句柄

1.定位赶集网招聘求职按钮,并点击
2.点击后,获取当前所有的句柄:window_handles

# coding :utf-8
from selenium import webdriver
duiver = webdriver.Firefox()
driver.get("https://bj.ganji.com")
driver.implicitly_wait(10)
h = driver.current_window_handle
print h # 打印首页句柄
driver.find_element_by_link_text("招聘求职").click()
all_h = driver.weindow_handles
print all_h #打印所有的句柄

2.7.4 切换句柄

网上大部分教程都是些的第一种方法,这里新增一个更简单的方法,直接从获取所有的句柄 list 里面取值。
方法一:

  1. 循环判断是否与首页句柄相等
  2. 如果不等,说明是新页面的句柄
  3. 获取的新页面句柄后,可以切换到新打开的页面上
  4. 打印新页面的 title,看是否切换成功

方法二:

  1. 直接获取 all_h 这个 list 数据里面第二个 hand 的值:all_h[1]
# 方法一:判断句柄,不等于首页就切换
# for i in all_h:
# if i != h:
#  driver.switch_to.window(i)
#  print driver.title

# 方法二:获取list里面第二个直接切换
driver.switch_to.window(all_h[1])
print driver0title
# 关闭新窗口

2.7.5 关闭新窗口,切回主页

  1. close 是关闭当前窗口,因为此时有两个窗口,用 close 可以关闭其中一个,quit 是退出整个进程(如果当前有两个窗口,会一起关闭)。
  2. 切换到首页句柄:h
  3. 打印当前页面的 title,看是否切换到首页了

2.7.6 参考代码

# coding:utf-8
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://bj.ganji.com/")
h = driver.current_window_handle
print h # 打印首页句柄
driver.find_element_by_link_text("招聘求职").click()
all_h = driver.window_handles
print all_h # 打印所有的句柄
# 方法一:判断句柄,并等亍首页就切换
# for i in all_h:
# if i != h:
# driver.switch_to.window(i)
# print driver.title
# 方法二:获取 list 里面第二个直接切换
driver.switch_to.window(all_h[1])
print driver.title
# 关闭新窗口
driver.close()
# 切换到首页句柄
driver.switch_to.window(h)
# 打印当前的 title
print driver.title

总结

下篇会为大家带来iframe的操作,最近有点忙,更新也慢了下来,不过从这篇以后尽量会保持在两天一更的

最后的最后点击并输入暗号:CSDN可以领取视频资料哦,辛辛苦苦制作的没人来看吗,呜呜呜>


转载:https://blog.csdn.net/Chaqian/article/details/109864809
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场