ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

鼠标、键盘事件处理,等待的处理、iframe页面框架

2022-09-15 18:00:09  阅读:341  来源: 互联网

标签:事件处理 鼠标 webdriver selenium driver sleep iframe time import iframe参数


七.ActionChainsl类针对鼠标事件的处理

ActionChains主要是针对鼠标事件的处理,在鼠标事件中常用的交互为悬浮,双击,以及右键等操作。如果想使用ActionChains的类,首先需要导入它,导入的命令为:

from selenium.webdriver.common.action_chains import ActionChains

(一)悬浮

悬浮的交互以百度搜索的设置为例,鼠标悬浮到设置,就会显示出下拉框的内容信息,具体交互信息如下:

 

 下面就实现这部分,具体案例代码如下:

from selenium.webdriver.common.by import By
from selenium import webdriver
import time
from selenium.webdriver.common.action_chains import ActionChains
#悬浮,针对设置
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('http://www.baidu.com')
obj=ActionChains(driver=driver)
time.sleep(1)

#定位到设置并找到元素属性
settings=driver.find_element(By.XPATH,'//*[@id="s-usersetting-top"]')
#鼠标悬浮到设置按钮
obj.move_to_element(settings).perform()
time.sleep(2)

点击定位‘搜索设置’,先定位到设置,然后直接查找,代码如下:

#点击搜索设置
driver.find_element(By.XPATH,'//*[@id="s-user-setting-menu"]/div/a[1]/span').click()
time.sleep(2)

 

 

 点击保存设置,并且输出对话框内容,代码如下

#点击保存设置
driver.find_element(By.XPATH,'//*[@id="se-setting-7"]/a[2]').click()
time.sleep(2)
#输出文本
print(driver.switch_to.alert.text)
#一定要点确认
driver.switch_to.alert.accept()
driver.close()

 完整版实现代码:

#悬浮。针对设置
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('http://www.baidu.com')
obj=ActionChains(driver=driver)
time.sleep(1)

#定位到设置并找到元素属性
settings=driver.find_element(By.XPATH,'//*[@id="s-usersetting-top"]')
#鼠标悬浮到设置按钮
obj.move_to_element(settings).perform()
time.sleep(2)

#点击搜索设置
driver.find_element(By.XPATH,'//*[@id="s-user-setting-menu"]/div/a[1]/span').click()
time.sleep(2)

#点击保存设置
driver.find_element(By.XPATH,'//*[@id="se-setting-7"]/a[2]').click()
time.sleep(2)
#输出文本
print(driver.switch_to.alert.text)
#一定要点确认
driver.switch_to.alert.accept()
driver.close()

(二)右键

右键使用到的方法为content_click() 的方法,下面就以百度搜索输入框为案例,来演示右键的操作,具体实现的代码为:

from selenium.webdriver.common.by import By
from selenium import webdriver
import time
from selenium.webdriver.common.action_chains import ActionChains
#右键
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('http://www.baidu.com')
time.sleep(1)

#右键悬浮,导入了类需要实例化
obj=ActionChains(driver=driver)
time.sleep(2)
#定位到需要右键的地方,此处是搜索栏
so=driver.find_element(By.ID,'kw')

#右键,用实例化的对象针对定义的搜索栏右键
obj.context_click(so).perform()
time.sleep(2)
driver.close()

(三)鼠标双击

double_click一般主要应用于数据的交互方面,比如添加用户姓名的按钮,假设程序规定用户名称是唯一的,那么双击后是否插入了两条用户名称一样的信息了,这就需要来验证,提交数据后,然后在数据列表中使用用户名称来查询,查看是否存在两条数据,一般而言,前后端的程序员都是会处理这些的,但是作为测试我们还是需要验证这些测试场景。下面主要结合百度搜索来作为案例,具体代码如下:

#双击。比如支付的按钮双击多次
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('http://www.baidu.com')
time.sleep(1)

#导入了类需要实例化
obj=ActionChains(driver=driver)
time.sleep(2)
#在搜索栏输入内容,为下一步铺垫
driver.find_element(By.ID,'kw').send_keys('刘亦菲')
time.sleep(3)
#定位到需要双击的地方,此处是对'百度一下'的按钮定位
button=driver.find_element(By.ID,'su')
time.sleep(3)
#双击,用实例化的对象对定义的‘百度一下’按钮双击
obj.double_click(button).perform()
time.sleep(3)
driver.close()

八.WebDriverWait类

在UI的自动化测试中,经常会由于网络加载慢的问题导致资源加载不出来,从而影响测试的效率,之前我们对这样的处理方案是使用了time库里面的sleep()方法来休眠几秒钟,但是这样的方式毕竟不是很好的解决方案。在UI自动化测试中,关于等待的部分,主要汇总为如下三点,具体如下:

1、固定等待,也就是使用sleep()方法

2、隐式等待,使用到的方法是implicitly_wait的方法,可以把它理解为设置最长等待时间

3、显式等待,主要指的是程序每隔一段时间执行自定义的程序判断条件,如果判断成立,程序就会继续执行,如果判断失败,就会报TimeOutExpection的异常信息。

(一)WebDriverWait显示等待

在UI的自动化测试中,显式等待主要使用的是类WebDriverWait,它里面提供了很多的解决方案,下面具体对它进行分析,我们要使用它,那么我们就首先需要到人它,导入的代码具体如下:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium import webdriver
import time

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as es

元素可见时的操作

下面我们具体来看显式等待的案例应用,element_to_be_clickable是元素可见的时候进行操作,当然元素不可见那么就无法操作,这个主要指的是资源加载出来进行具体的操作,下面以百度搜索为案例来演示这部分,涉及到的源码为:

from selenium.webdriver.common.by import By
from selenium import webdriver
import time

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as es



driver=webdriver.Chrome()
driver.maximize_window()
driver.get('http://www.baidu.com')
time.sleep(2)

#资源可见时的操作
driver.implicitly_wait(30)
obj=WebDriverWait(driver=driver,timeout=10).until(method=es.element_to_be_clickable((By.ID,'kw')))

obj.send_keys('刘亦菲是仙女')
time.sleep(2)
driver.close()

指定元素的文本位置

这个方法主要应用于错误文本信息的验证,我们首先需要错误文本信息显示出来才能够进行断言的验证,使用到的方法为:text_to_be_present_in_element,下面主要是以sina email为案例来演示下这部分的具体应用,具体代码如下:

#指定元素的位置。主要验证元素的文本信息,通常用于错误信息出现的查找
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('https://mail.sina.com.cn/#')
time.sleep(2)

driver.implicitly_wait(30)
time.sleep(2)
driver.find_element(By.CLASS_NAME,'loginBtn').click()
obj=WebDriverWait(driver=driver,timeout=10).until(method=es.text_to_be_present_in_element((By.XPATH,'/html/body/div[1]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]'),'请输入邮箱名'))
time.sleep(2)
driver.close()

判断元素是否可见

这里以百度首页的关于百度为案例,使用到的方法为:visibilty_of_element_located,具体实现的源码为:

#元素可见

driver=webdriver.Chrome()
driver.maximize_window()
driver.get('http://www.baidu.com')
time.sleep(2)

#资源可见时的操作
driver.implicitly_wait(30)
time.sleep(2)
obj=WebDriverWait(driver=driver,timeout=10).until(method=es.visibility_of_element_located((By.LINK_TEXT,'关于百度')))
print(obj.is_displayed())
obj.click()
time.sleep(2)
driver.close()

九.Keys类对键盘事件的处理

在UI的自动化测试中,有时候也会遇到键盘事件的操作,使用到的类为Keys,导入方式具体如下:

from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium import webdriver
import time


driver=webdriver.Chrome()
driver.maximize_window()
driver.get('http://www.baidu.com')
time.sleep(1)


so=driver.find_element(By.ID,'kw')
so.send_keys('刘亦菲是仙女啊')
time.sleep(2)

so.send_keys(Keys.CONTROL,'a')
time.sleep(2)
so.send_keys(Keys.CONTROL,'C')
time.sleep(2)
so.send_keys(Keys.DELETE)
time.sleep(2)
so.send_keys(Keys.CONTROL,'V')
time.sleep(2)
driver.close()

十.iframe页面框架

iframe页面的框架,当使用八元素都定位不成功,检查是否是iframe页面使用ID NAME INDEX 三种方式进入iframe页面才可以定位

此处以腾讯文件——云空间为例

使用索引定位

具体代码如下:

from selenium.webdriver.common.by import By
from selenium import webdriver
import time

driver=webdriver.Chrome()
driver.maximize_window()
driver.get('https://file.qq.com/')
time.sleep(2)
driver.implicitly_wait(30)
time.sleep(2)

#使用索引的方式进入iframe
#进入第一个iframe
driver.switch_to.frame(0)
time.sleep(2)
#进入第二个iframe
driver.switch_to.frame(0)
time.sleep(2)

 

 

使用ID定位

具体代码如下:

from selenium.webdriver.common.by import By
from selenium import webdriver
import time

driver=webdriver.Chrome()
driver.maximize_window()
driver.get('https://file.qq.com/')
time.sleep(2)
driver.implicitly_wait(30)
time.sleep(2)

#使用ID的方式进入iframe
#进入第一个iframe
driver.switch_to.frame('login_frame1')
#进入第二个iframe
driver.switch_to.frame('ptlogin_iframe')
#进入到所需要点击的’密码登录‘
driver.find_element(By.XPATH,'//*[@id="switcher_plogin"]').click()
time.sleep(2)
driver.close()

 

 

标签:事件处理,鼠标,webdriver,selenium,driver,sleep,iframe,time,import,iframe参数
来源: https://www.cnblogs.com/zxx4/p/16697485.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有