Selenium之操作浏览器、元素等待、窗体切换和弹窗处理

简介: 最常用的几个方法: clear() 清除文本,send_keys(*values) 模拟按键输入,click() 单击元素, submit() 用于提交表单,有时候可以与click()方法互换使用。

浏览器操作


  • 控制浏览器窗口大小


浏览器设置最大化

driver.maximize_window()

设置浏览器显示大小

driver.set_window_size(1480, 800)


  • 控制浏览器前进后退

后退:driver.back()

前进:driver.forward()

效果演示:



微信图片_20220113163746.gif



  • 模拟浏览器刷新

driver.refresh()


简单的元素操作

最常用的几个方法:

  • clear()    清除文本

  • send_keys(*values)    模拟按键输入

  • click()    单击元素
  • submit()    用于提交表单,有时候可以与click()方法互换使用

获取元素的某些属性:

size:    返回元素的尺寸

text:    返回元素的文本

get_attribute(name):    获得属性值

is_displayed():     获取该元素是否用户可见

is_enabled():    判断元素是否可用

is_selected():    判断元素是否被选中


模拟鼠标操作

由于现在web端页面提供了更丰富的鼠标交互方式,因此,在做UI自动化的过程中可能会用到鼠标的右击、双击、悬停、甚至是鼠标拖动等功能。这些在WebDriver 中都是支持的,基于鼠标的相关操作方法都封装在ActionChains类中。

以python为例,需要先导入对应的包:

from selenium.webdriver.common.action_chains import ActionChains

ActionChains类提供了鼠标操作的常用方法:

  • perform():执行所有ActionChains中存储的行为
  • context_click():    右击
  • double_click():    双击
  • drag_and_drop():    拖动
  • move_to_element():    鼠标悬停
  • drag_and_drop(source,target):    鼠标拖放操作,在source元素上按住鼠标左键,然后移动到target目标元素上释放
  • click_and_hold():    鼠标左键按住不放
  • release(): 释放鼠标


使用案例:


微信图片_20220113163750.png


所有鼠标的操作,最后都要调用perform()方法进行最后的执行。


模拟键盘操作

之前介绍过,可以通过send_keys()方法用来模拟键盘输入,除此之外,还可以用它来输入键盘上的按键以及组合键。

使用前,需要先导入keys类

from selenium.webdriver.common.keys import Keys

send_keys()方法用来模拟键盘输入,常用的键盘操作:

send_keys()方法用来模拟键盘输入,常用的键盘操作:

  • send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
  • send_keys(Keys.SPACE) 空格键(Space)
  • send_keys(Keys.TAB) 制表键(Tab)
  • send_keys(Keys.ESCAPE) 回退键(Esc)
  • send_keys(Keys.ENTER) 回车键(Enter)
  • send_keys(Keys.CONTROL,'a') 全选(Ctrl+A)
  • send_keys(Keys.CONTROL,'c') 复制(Ctrl+C)
  • send_keys(Keys.CONTROL,'x') 剪切(Ctrl+X)
  • send_keys(Keys.CONTROL,'v') 粘贴(Ctrl+V)
  • send_keys(Keys.F1) 键盘 F1
  • ……
  • send_keys(Keys.F12) 键盘 F12

设置元素等待

WebDriver提供了两种类型的等待:显示等待和隐式等待


显示等待:

显示等待使WebDriver等待某个条件成立时继续执行,否则在达到最大时长时抛出超时异常(TimeoutException)。这个是针对特定元素设置的

具体用法:

from selenium.webdriver.support.wait import WebDriverWait
WebDriverWait(driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None)
timeout:最长超时时间,单位默认为秒
poll_frequency:检测的间隔时间,默认0.5秒

WebDriverWait()一般与until()或until_not()方法配合使用,常见用法:

from selenium.webdriver.support import expected_conditions as EC
WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator))

expected_conditions类提供的预期条件判断的方法:


  • title_is:判断当前页面的title是否完全等于(==)预期字符串,返回是布尔值
  • title_contains 判断当前页面的title是否包含预期字符串,返回布尔值
  • presence_of_element_located:判断某个元素是否被加到了dom树里,并不代表该元素一定可见
  • visibility_of_element_located : 判断某个元素是否可见. 可见代表元素非隐藏,并且元素的宽和高都不等于0
  • visibility_of :跟上面的方法做一样的事情,只是上面的方法要传入locator,这个方法直接传定位到的element就好了
  • presence_of_all_elements_located : 判断是否至少有1个元素存在于dom树中。举个例子,如果页面上有n个元素的class都是'column-md-3',那么只要有1个元素存在,这个方法就返回True
  • text_to_be_present_in_element : 判断某个元素中的text是否 包含 了预期的字符串
  • text_to_be_present_in_element_value:判断某个元素中的value属性是否 包含 了预期的字符串
  • frame_to_be_available_and_switch_to_it : 判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False
  • invisibility_of_element_located : 判断某个元素中是否不存在于dom树或不可见
  • element_to_be_clickable : 判断某个元素中是否可见并且是enable的,这样的话才叫clickable
  • staleness_of :等某个元素从dom树中移除,注意,这个方法也是返回True或False
  • element_to_be_selected:判断某个元素是否被选中了,一般用在下拉列表
  • element_selection_state_to_be:判断某个元素的选中状态是否符合预期
  • element_located_selection_state_to_be:跟上面的方法作用一样,只是上面的方法传入定位到的element,而这个方法传入locator
  • alert_is_present : 判断页面上是否存在alert

隐式等待:

隐式等待,是设置的全局等待。设置等待时间,是对页面中的所有元素设置加载时间,即整个页面的加载时间;

用法:driver.implicitly_wait(10),如果不设置默认为0


sleep休眠方法:

通过导入time模块的方法,强制固定时间的休眠,比如停留X秒之后再继续操作。用法:

import time
time.sleep(5)  #停留5秒以后再继续操作

frame/iframe/window切换

1、有时候页面会经常遇到frame/iframe嵌套,WebDriver只能在一个页面上对元素识别与定位,这个时候需要切换到相应的frame/iframe里面。

用法:driver.switch_to_frame(element)

2、有时候点某个链接,会跳转到一个新的页签,这个时候需要切换到新打开的页签中才能继续操作。

用法:driver.switch_to_window(element)


alert、confirm以及prompt弹窗处理

处理JavaScript所生成的alert、confirm以及prompt弹窗用法如下:

使用driver.switch_to.alert方法定位到alert/confirm/prompt,然后使用text/accept/dismiss/send_keys等方法进行操作。

注意:在selenium2的版本中可能会出现教大家用driver.swicth_to_alert()方法去定位的,在selenium3中已经改为了driver.switch_to.alert

  • text:返回alert/confirm/prompt中的文字信息
  • accept():接受现有警告框,类似于确定操作

用法演示:

print(driver.switch_to.alert.text)
driver.switch_to.alert.accept()


微信图片_20220113163752.gif


  • dismiss():解散现有警告框,类似于取消
  • send_keys():发送文本至警告框

注意:

driver.switch_to.alert.send_keys('hello world')   #只对prompt有效
driver.switch_to.alert.accept()  #确认
driver.switch_to.alert.dismiss()  #取消

微信图片_20220113163755.gif

相关文章
|
1月前
|
Web App开发 Java 测试技术
多任务一次搞定!selenium自动化复用浏览器技巧大揭秘
多任务一次搞定!selenium自动化复用浏览器技巧大揭秘
42 1
|
1月前
|
Web App开发 Java 测试技术
《手把手教你》系列基础篇之(四)-java+ selenium自动化测试- 启动三大浏览器(下)基于Maven(详细教程)
【2月更文挑战第13天】《手把手教你》系列基础篇之(四)-java+ selenium自动化测试- 启动三大浏览器(下)基于Maven(详细教程) 上一篇文章,宏哥已经在搭建的java项目环境中实践了,今天就在基于maven项目的环境中给小伙伴们 或者童鞋们演示一下。
66 1
|
1月前
|
Web App开发 Java 测试技术
《手把手教你》系列基础篇之(三)-java+ selenium自动化测试- 启动三大浏览器(上)(详细教程)
【2月更文挑战第12天】《手把手教你》系列基础篇之(三)-java+ selenium自动化测试- 启动三大浏览器(上)(详细教程) 前边宏哥已经将环境搭建好了,今天就在Java项目搭建环境中简单地实践一下: 启动三大浏览器。按市场份额来说,全球前三大浏览器是:IE.Firefox.Chrome。因此宏哥这里主要介绍一下如何启动这三大浏览器即可,其他浏览器类似的方法,照猫画虎就可以了。
44 1
|
2天前
|
Web App开发 数据采集 Java
《手把手教你》系列技巧篇(三十)-java+ selenium自动化测试- Actions的相关操作下篇(详解教程)
【4月更文挑战第22天】本文介绍了在测试过程中可能会用到的两个功能:Actions类中的拖拽操作和划取字段操作。拖拽操作包括基本讲解、项目实战、代码设计和参考代码,涉及到鼠标按住元素并将其拖动到另一个元素上或指定位置。划取字段操作则介绍了如何在一段文字中随机选取一部分,包括项目实战、代码设计和参考代码。此外,文章还提到了滑动验证的实现,并提供了相关的代码示例。
24 2
|
9天前
|
Java 测试技术 定位技术
《手把手教你》系列技巧篇(二十三)-java+ selenium自动化测试-webdriver处理浏览器多窗口切换下卷(详细教程)
【4月更文挑战第15天】本文介绍了如何使用Selenium进行浏览器窗口切换以操作不同页面元素。首先,获取浏览器窗口句柄有两种方法:获取所有窗口句柄的集合和获取当前窗口句柄。然后,通过`switchTo().window()`方法切换到目标窗口句柄。在项目实战部分,给出了一个示例,展示了在百度首页、新闻页面和地图页面之间切换并输入文字的操作。最后,文章还探讨了在某些情况下可能出现的问题,并提供了一个简单的本地HTML页面示例来演示窗口切换的正确操作。
37 0
|
11天前
|
JavaScript 前端开发 安全
JavaScript DOM 操作:解释一下浏览器的同源策略。
**同源策略**是浏览器安全基石,它阻止脚本跨不同协议、域名或端口访问资源,防止恶意行为。例如,HTTP页面无法直接用JS获取HTTPS页面内容。**CORS**允许跨域请求,但需服务器配合设置,通过`document.domain`属性可配置,但仍受限于服务器配置。
14 4
|
17天前
【超实用】Angular如何修改当前页面网页浏览器url后面?param1=xxx&param2=xxx参数(多用于通过浏览器地址参数保存用户当前操作状态的需求),实现监听url路由切换、状态变化。
【超实用】Angular如何修改当前页面网页浏览器url后面?param1=xxx&param2=xxx参数(多用于通过浏览器地址参数保存用户当前操作状态的需求),实现监听url路由切换、状态变化。
|
17天前
|
JavaScript
【归总】原生js操作浏览器hash、url参数参数获取/修改方法合集
【归总】原生js操作浏览器hash、url参数参数获取/修改方法合集
|
1月前
|
Web App开发 测试技术
使用selenium轻松实现元素拖拽
本文介绍了如何使用Selenium进行Web自动化测试中的元素拖拽操作。通过`ActionChains`类,我们可以模拟用户拖拽行为,确保测试覆盖到页面布局调整等交互功能。示例代码展示了如何定位元素并执行拖拽,以及在实际场景中改变页面布局的应用。利用Selenium的拖拽功能,可提升自动化测试的真实性和效率。
17 0
|
1月前
|
Web App开发 数据可视化 测试技术
Selenium Headless模式:无头浏览器的使用与优势
Selenium Headless模式是无界面的自动化测试方式,适用于Chrome和Firefox等浏览器,提供更快的速度、更高的隐秘性和资源节省。在Python中启用该模式,需导入Options并设置相关参数。示例代码展示了如何在无头模式下访问网站、执行点击和输入操作。这种模式提升了测试效率和稳定性,尤其适合大规模测试和CI环境。
35 1