2.selenium 元素操作+操作浏览器+获取元素信息+鼠标和键盘操作+元素等待

4.元素操作

4.1.为社么要学习操作元素方法?

  1. 需要让脚本模拟用户给指定元素输入值
  2. 需要让脚本模拟人为删除元素的内容
  3. 需要让脚本模拟点击操作

4.2元素常用操作方法

  1. click() 单击元素
  2. send_keys() 模拟输入
  3. clear() 清除文本

4.3.案例

打开百度页面
输入hello
间隔三秒,修改为hello world
间隔三秒,点击确定
间隔三秒,关闭浏览器

from selenium import webdriver
from time import sleep
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element_by_id('kw').send_keys('hello ')
sleep(2)

#修改输入内容---->清空操作
driver.find_element_by_id('kw').clear()
driver.find_element_by_id('kw').send_keys('hello  world')

sleep(3)
driver.find_element_by_id('su').click()

sleep(3)
driver.quit()

5.操作浏览器

5.1操作浏览器常用方法

方法说明
1.maximize_window()最大化浏览器窗口–>模拟浏览器最大化窗口
2. set_window_size(width,height)设置浏览器窗口大小–>设置浏览器宽,高(像素点)
3.set_window_position(x,y)设置浏览器位置–>设置浏览器位置
4.back()后退–>模拟浏览器后退按钮
5.forword()前进–>模拟浏览器前进按钮
6.refresh()刷新–>模拟浏览器F5刷新
7. close()关闭当前窗口–>模拟点击浏览器关闭按钮
8.quit()关闭浏览器驱动对象–>关闭所有程序启动的窗口
9.title获取页面title
10.current_url获取当前页面url

5.2案例(1,2,3,4,5)

from selenium import webdriver
from time import sleep

#浏览器最大化,位置,大小,前进,后退


driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
#将浏览器最大化
driver.maximize_window()
#暂停2m
sleep(2)
#设置固定大小(300,200)
driver.set_window_size(300,200)
#暂停2m
sleep(2)
#移动浏览器窗口位置:x:320,y:150
driver.set_window_position(320,150)
#暂停2m
sleep(2)
#最大化
driver.maximize_window()
#点击“地图”访问网站,注意:要演示后退功能,必须先执行打开一个新的网站
driver.find_element_by_link_text('地图').click()

#暂停2m
sleep(10)
#执行后退--->百度页面
driver.back()

#暂停2m
sleep(10)
#执行前进--->地图页面。注意:前进必须放在后退操作后执行
driver.forward()

sleep(3)
driver.quit()

5.3案例(6.7.8.9.10)

from selenium import webdriver
from time import sleep

#浏览器title,quit,close,refresh,current_url


driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
#刷新
driver.find_element_by_id('kw').send_keys('hello')
sleep(4)
driver.refresh()
#获取title
title=driver.title#字符串
print(title)
#获取当前url
current_url=driver.current_url#字符串
print(current_url)
#点击“地图”访问网站,注意:要演示后退功能,必须先执行打开一个新的网站
driver.find_element_by_link_text('地图').click()
sleep(10)
#close:关闭主窗口
driver.close()

#暂停2m
sleep(10)
#quit()
driver.quit()

6.获取元素信息

6.1为什么要学习获取元素信息的方法

  • 如何获取元素的文本?
  • 如何获取元素属性值?
  • 如何让程序判断元素是否为可见状态?

6.2获取元素信息的常用方法

方法说明
size返回元素大小
*****text获取元素的文本
get_attribute(“xxx”)获取属性值,传递的参数为元素的属性名
is_displayed()判断元素是否可见
is_enabled()判断元素是否可用
is_selected()判断元素是否选中,用来检查复选框或单选按钮是否被选中

6.3.案例

需求:http://www.baidu.com,完成以下操作
获取输入框大小
获取页面第一个超链接的文本内容
获取页面上第一个超链接的地址
判断页面的span标签是否可见
判断页面中百度以下按钮是否可见
X :判断页面中复选框是否为选中状态

from selenium import webdriver
from time import sleep

#元素常用操作方法


driver=webdriver.Chrome()
driver.get('http://www.baidu.com')

#获取输入框大小
size=driver.find_element_by_id('kw').size
print('获取输入框大小为',size)
#获取页面第一个超链接的文本内容
text=driver.find_element_by_css_selector('a').text
print('页面第一个超链接的文本内容为',text)
#获取页面上第一个超链接的地址 get_attribute('href')
attribute=driver.find_element_by_css_selector('a').get_attribute('href')
print('页面上第一个超链接的地址为',attribute)
#判断页面的span标签是否可见
display=driver.find_element_by_css_selector('span').is_displayed()
print('页面的span标签是否可见',display)
#判断页面中百度以下按钮是否可见
enable=driver.find_element_by_id('su').is_enabled()
print('页面中百度以下按钮是否可见',enable)
#X   :判断页面中复选框是否为选中状态
#select=driver.find_element_by_css_selector('').is_selected()
#暂停2m
sleep(10)
#quit()
driver.quit()

输出:
获取输入框大小为 {‘height’: 44, ‘width’: 548}
页面第一个超链接的文本内容为
页面上第一个超链接的地址为 https://www.baidu.com/
页面的span标签是否可见 True
页面中百度以下按钮是否可见 True

7.鼠标和键盘操作

7.1鼠标操作:点击,右击,双击,悬停,拖拽。

7.2为什么要用鼠标操作?

web产品中存在丰富的鼠标交互方式,作为一个web自动化测试框架,需要应对这些鼠标操作的应用场景

7.3鼠标常见操作方法

selenium中将鼠标操作的方法封装在ActionChains中
需实例化对象:action=ActionChains(driver)

方法说明
1.context_click(element)右击---->模拟鼠标右键点击效果
2.double_click(element)双击
3.drag_and_drop(source,target)拖动
4.move_to_eleement(eleement)悬停
5.perform()执行—>此方法用来执行以上所有鼠标操作,不然不能够实现

7.4.案例 1.2.4.5

from selenium import webdriver
from time import sleep
from selenium.webdriver import ActionChains
#mouse


driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
#实例化,并获取ActionChains类
action=ActionChains(driver)
#定位文本框 ,右击 --->粘贴
#获取文本框元素
id=driver.find_element_by_id('kw')
#右击
action.context_click(id).perform()
sleep(10)
#双击‘文本框’--->选中内容
driver.find_element_by_id('kw').send_keys("hello")
action.double_click(id).perform()
sleep(10)
#悬停    移动到‘百度一下’按钮上,颜色变为蓝色
action.move_to_element(driver.find_element_by_id('su')).perform()

#拖拽  action.click_and_hold()
sleep(10)
#quit()
driver.quit()

注意:定位文本框 ,右击 —>粘贴内容只能用于firefox,ie浏览器,不能用于chrome浏览器

from selenium import webdriver
from time import sleep
from selenium.webdriver import ActionChains
#mouse  右击扩展

#定位文本框 ,右击 --->粘贴内容只能用于firefox,ie浏览器,不能用于chrome浏览器
driver=webdriver.Firefox()
driver.get('http://www.baidu.com')
#实例化,并获取ActionChains类
action=ActionChains(driver)
#定位文本框 ,右击 --->粘贴
#获取文本框元素

id=driver.find_element_by_id('kw')
#点击右键
action.context_click(id).perform()
#发送p,快捷菜单(粘贴)
id.send_keys('p')

sleep(10)

sleep(10)
#quit()
driver.quit()

7.5案例 3拖拽

7.6键盘操作:
selenium中将键盘的按键都封装在keys中
导包:from selenium.webdriver.common.keys import keys
7.7常见的键盘操作

方法说明
1.send_keys(keys.BACK_SPACE)删除键 backspace
2.send_keys(keys.SPACE)空格键 space
3.send_keys(keys.TAB)制表键tab
4.send_keys(keys.ESCAPE)回退键esc
5.send_keys(keys.ENTER)enter
6.send_keys(keys.CONTROL,‘a’)全选(ctrl+a)
7.send_keys(keys.CONTROL,‘c’)复制(ctrl+c)

7.8案例

打开百度页面
输入12345,暂停3m,删除5;
全选输入内容,暂停3m;
复制输入内容,暂停3m;
清空,暂停3m,粘贴至输入框

from selenium import webdriver
from time import sleep

#键盘操作

#定位文本框 ,右击 --->粘贴内容只能用于firefox,ie浏览器,不能用于chrome浏览器
from selenium.webdriver.common.keys import Keys

driver=webdriver.Chrome()
driver.get('http://www.baidu.com')

#输入12345,暂停3m,删除5;
driver1=driver.find_element_by_id('kw')
driver1.send_keys('12345')
sleep(3)
driver1.send_keys(Keys.BACK_SPACE)
sleep(5)
#全选输入内容,暂停3m;ctrl+A
driver1.send_keys(Keys.CONTROL,'a')
sleep(3)
#复制输入内容,暂停3m; ctrl+c
driver1.send_keys(Keys.CONTROL,'c')
sleep(3)
#清空,暂停3m,粘贴至输入框 ctrl+v
driver1.clear()
sleep(5)
driver1.send_keys(Keys.CONTROL,'v')
sleep(3)

#quit()
driver.quit()

8.元素等待

8.1.为什么要设置等待?

  • 网络速度低
  • 电脑配置低
  • 服务器处理请求慢

8.2.什么是元素等待?

在定位页面元素时,会在指定时间内一直等待的过程

8.3元素等待类型

1.隐式等待
2.显式等待:只针对单个元素有效

8.4隐式等待

定位元素时,如果能定位到元素则直接返回该元素,不触发等待;如果不能定位到该元素,则间隔一段时间后再去定位元素;如果在达到最大时长还没有找到指定元素,则抛出元素 不存在的异常 NoSuchElementException。

8.4.1 实现方式

方法:driver.implicitly_wait(timeout)(timeout:为等待最大时长,单位:秒)一般设置30
说明:该等待为全局变量(只需要设置一次,就会作用于所有元素)
所有元素生效
一般情况下为前置必写代码
8.4.2案例
打开百度王雅网页,使用该等待定位输入框,如果元素存在,就输入12345

from selenium import webdriver
from time import sleep

#打开百度王雅网页,使用该等待定位输入框,如果元素存在,就输入12345
"""
给一个错误id,如果直接抛出异常,说明等待失效,定位失败。如果在设置指定时间外抛出异常,说明等待生效



"""


driver=webdriver.Chrome()
#设置隐式等待
driver.implicitly_wait(10)
driver.get('http://www.baidu.com')


driver1=driver.find_element_by_id('k')

sleep(5)

driver.quit()

8.5.显式等待

定位元素时,如果能定位到元素则直接返回该元素,不触发等待;如果不能定位到该元素,则间隔一段时间后再去定位元素;如果在达到最大时长还没有找到指定元素,则抛出元素 不存在的异常 TimeoutException。

selenium中封装在WebDriverWait中

8.5.1.实现方式

  1. 导包 等待类 from selenium.webdriver.support.wait import WebDriverWait

  2. WebDriverWait(driver,timeout,poll_frequency=0.5)
    1).driver:浏览器对象
    2).timeout:超时时长。单位:秒
    3)poll_frequency:检测间隔时间。默认0.5秒

  3. 调用方法:until(method):直到 … 时
    1).method:函数名称,该函数用来实现对元素的定位
    2).一般使用匿名函数来实现,lambda x:x.find_element_by_id(‘kw’)

  4. element=WebDriverWait(driver,10,1).until(lambda x:x.find_element_by_id(‘kw’))

from selenium import webdriver
from time import sleep
from selenium.webdriver.support.wait import WebDriverWait
#打开百度网页,使用该等待定位输入框,如果元素存在,就输入12345
"""
给一个错误id,如果直接抛出异常,说明等待失效,定位失败。如果在设置指定时间外抛出异常,说明等待生效


设置显式等待


步骤:

 1. 导包  等待类    from selenium.webdriver.support.wait import WebDriverWait
 2. WebDriverWait(driver,timeout,poll_frequency=0.5)
        1).driver:浏览器对象
        2).timeout:超时时长。单位:秒
        3)poll_frequency:检测间隔时间。默认0.5秒

 3. 调用方法:until(method):直到  .. 时
        1).method:函数名称,该函数用来实现对元素的定位
        2).一般使用匿名函数来实现,lambda x:x.find_element_by_id('kw')
 4. element=WebDriverWait(driver,10,1).until(lambda x:x.find_element_by_id('kw'))

"""


driver=webdriver.Chrome()
#设置显式等待

driver.get('http://www.baidu.com')
#调用until返回的一定是一个元素
input=WebDriverWait(driver,timeout=5,poll_frequency=0.5).until(lambda x:x.find_element_by_id('k'))
#输入值  注意:此时input还不是元素,只有代码运行起来才会是元素

input.send_keys("12345")


sleep(5)

driver.quit()

send_keys()扩展

上传文件操作:
#错误实现
driver.find_element_by_id(’’).click()
#正确实现
driver.find_element_by_id(’’).send_keys(‘需上传文件的路径’)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值