3.seleniumAPI操作续

文件地址:file:///C:/Users/31940/Documents/HBuilderProjects/work/selenium_test.html

1.下拉选择框操作

1.1案例:默认是voivo 暂停5m,定位fiat,暂停5m,定位audi

方式1:使用css定位

from selenium import webdriver
from time import sleep
from selenium.webdriver.support.wait import WebDriverWait
#打开本地网页
driver=webdriver.Chrome()

#最大化浏览器
driver.maximize_window()
#隐式等待
driver.implicitly_wait(30)

driver.get(r'file:///C:/Users/31940/Documents/HBuilderProjects/work/selenium_test.html')
""""
目标:默认是voivo
    暂停5m
    1,定位fiat,暂停5m,定位audi
    

"""
#方式1:使用css定位
sleep(10)
driver.find_element_by_css_selector("[value='fiat']").click()
sleep(10)
driver.find_element_by_css_selector("[value='audi']").click()
sleep(5)

driver.quit()

1.2.方法2.Select类

说明:Select类是Selenium为操作select标签特殊封装的
实例化对象:select=Select(element)
element:标签对应的元素,通过元素定位方式获取
例如:driver.find_element_by_id(‘select’)

操作方法:

1.select_by_index(index) 根据option索引来定位,从0开始
2.select_by_value(value) 根据option属性value值来定位
3.select_by_visable_text(text) 根据option显示文本来定位

from selenium import webdriver
from time import sleep

from selenium.webdriver.support.select import Select


""""
使用Select类来实现
目标:默认是voivo
    暂停5m
    1,定位fiat,暂停5m,定位audi

步骤:
1.导包 Select类
2.获取Select对象
    匿名:Select(element).select_by_index()  #通过下标
    实名:select=Select(element)
            调用:select.select_by_index()
注意:
1.Select类是通过select标签来控制其下的option元素
2.element:只能是select标签
"""
#打开本地网页
driver=webdriver.Chrome()

#最大化浏览器
driver.maximize_window()
#隐式等待
driver.implicitly_wait(30)

driver.get(r'file:///C:/Users/31940/Documents/HBuilderProjects/work/selenium_test.html')

#方式2:select类
al=driver.find_element_by_css_selector('select')
sleep(5)
#通过下标进行访问
# Select(al).select_by_index(2)
# sleep(5)
# Select(al).select_by_index(3)


#**********通过value值进行访问*************
#实名获取Select对象
# s1=Select(al)
# s1.select_by_value('fiat')
#
# sleep(5)
# s1.select_by_value('audi')




#***********通过显示文本切换************
Select(al).select_by_visible_text('Fiat')
sleep(5)
Select(al).select_by_visible_text('Audi')

sleep(5)
driver.quit()

2.弹出框处理

网页中常用的三种弹出框:

  1. alert 警告框
  2. confirm 确认框
  3. prompt 提示框

2.1.案例:点击alert按钮,输入UsernameQ:(报错)

from selenium import webdriver
from time import sleep

""""
点击alert按钮,输入Username
"""
#打开本地网页
driver=webdriver.Chrome()
#最大化浏览器
driver.maximize_window()
#隐式等待
driver.implicitly_wait(30)
driver.get(r'file:///C:/Users/31940/Documents/HBuilderProjects/work/selenium_test.html')

#定位alert按钮,并点击
driver.find_element_by_css_selector("#alert").click()
sleep(5)
#对话框需进行处理,不然会出现UnexpectedAlertPresentException错误,且后续操作失效
#定位用户名,并输入12345
driver.find_element_by_id('user').send_keys('12345')
sleep(5)
driver.quit()

A解决:对话框需进行处理

from selenium import webdriver
from time import sleep

""""
点击alert按钮,输入Username
"""
#打开本地网页
driver=webdriver.Chrome()
#最大化浏览器
driver.maximize_window()
#隐式等待
driver.implicitly_wait(30)
driver.get(r'file:///C:/Users/31940/Documents/HBuilderProjects/work/selenium_test.html')

#定位alert按钮,并点击
driver.find_element_by_css_selector("#alert").click()
sleep(5)
#对话框需进行处理,不然会出现UnexpectedAlertPresentException错误,且后续操作失效
#切换到alert  默认返回对话框的对象
at=driver.switch_to.alert
#处理对话框
#同意
# at.accept()
#or 取消
#at.dismiss()
#or 获取文本
print('警告信息内容',at.text)
#定位用户名,并输入12345
driver.find_element_by_id('user').send_keys('12345')
sleep(5)
driver.quit()

2.2.对话框处理方法:

说明:Selenium中对处理对话框的操作,有专用的处理方法,并且处理的方法都一样
1.获取弹出框对象 alert=driver.switch_to.alert
2.调用

调用方法说明
alert.textf返回alert/confirm/prompt中的文字信息
alert.accpect()接受对话框选项
alert.text取消对话框选项

3.滚动条操作

1.在html页面中,由于前端技术框架的原因,页面元素为动态显示,元素根据滚动条的下拉而被加载
2.页面注册同意条款,需要滚动条到最底层,才能点击同意

3.1实现方式

说明:selenium中并没有直接提供操作滚动条的方法,但是它提供了可hi行JavaScript脚本的方法,所以我们可以通过JavaScript脚本达到操作滚动条的目的

  1. 设置Javascript脚本控制滚动条 js=“windows.scrollTo(0,1000)”
    (0:左边距,1000:上边距 单位像素)
  2. selenium调用执行JavaScript脚本的方法 driver.execute_script(js)

3.2案例
打开文件,暂停2m,滚动条拉到最底层

from selenium import webdriver
from time import sleep

""""
滚动条操作:打开文件,暂停2m,滚动条拉到最底层
"""
#打开本地网页
driver=webdriver.Chrome()
#最大化浏览器
driver.maximize_window()
#隐式等待
driver.implicitly_wait(30)
driver.get(r'file:///C:/Users/31940/Documents/HBuilderProjects/work/selenium_test.html')
sleep(3)
#定位alert按钮,并点击
#j设置avascript语句
js="window.scrollTo(0,1000)"
#调用js方法
driver.execute_script(js)

sleep(5)
driver.quit()

4.frame切换、多窗口切换

4.1frame切换

当前主目录中没有iframe表单页面元素信息,不切换,找不到元素

说明:在Selenium中封装了如何切换frame框架的方法
方法:
1.driver.switch_to.frame(frame_reference)--------->切换到指定frame的方法
frame_reference:可以是frame框架的name,id或定位到的frame元素
2.driver.switch_ti.default_contect()-------->恢复默认页面方法

4.2多窗口切换

如何是实现?

说明:在Selenium中封装了获取当前窗口句柄,获取所有窗口句柄和切换到指定句柄窗口的方法:句柄:英文为handle,窗口的唯一识别码
方法:
1.driver.current_window_handle 获取当前窗口句柄、
2.driver.window_handles 获取所有窗口句柄
driver.switch_to.window(handle) 切换到指定句柄窗口

5.窗口截屏、验证码处理

5.1窗口截屏

why?

自动化脚本是由程序去执行的,因此有时候打印的错误信息并不是很准确。如果在执行出错的时候,对当前窗口进行截图,那么通过截图就可以非常直观的观看到出错的原因

窗口截图的方法

说明:在selenium中,提供了截图的方法,只需调用即可
方法:driver.get_screenshot_as_file(imgpath)
imgpath:图片保存路径

案例:
打开百度页面,输入12345,截图保存


```python
from selenium import webdriver
from time import sleep

#输入12345,并截屏
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element_by_id('kw').send_keys('hello ')
sleep(5)
driver.get_screenshot_as_file('./12345.png')#保存在当前目录下

driver.get_screenshot_as_file('../image/12345.png')#保存在指定目录下../上级目录


#动态获取文件名称   使用时间戳  图片就不会重复了
driver.get_screenshot_as_file("../image/%s.png"%(time.strftime("%Y_%m_%d_%H_%M_%S")))   #年月日%Y_%m_%d_%H_%M_%S
sleep(3)
driver.quit()

5.2验证码

why?

在web应用中,大部分系统在用户登陆注册的时候都要求输入验证码,而我们设计自动化测试脚本的时候,就需要面临处理验证码的问题

验证码处理方式

说明:Selenium中并没有对验证码处理的方法,针对验证码处理常用的几种方式
方式:
1.去掉验证码(测试环境下–采用)
2.设置万能验证码(生产环境下-采用)
3.验证码识别技术(通过python-tesseract来识别图片类验证码:识别率很难达到100%)
4.记录cookie(通过记录cookie进行跳转登录)

Cookie
在这里插入图片描述

1.cookie 是由web服务器生成的,并且保存在用户浏览器上的小文本文件,它可以包含用户险关的信息
2.cookie数据格式:键值对组成(python中的字典)
3.cookie产生:客户端请求服务器,如果服务器要记录该用户状态,就像客户端浏览器发一个cookie数据
4.Cookie使用:当浏览器再次请求该网站时,浏览器把请求的数据和Cookie数据一同提交给服务器,服务器检查该cookie,以此辨认用户状态

selenium操作cookie

说明:selenium中对cookie操作提供相应的方法
方法:1,get_cookie(name)—>获取指定cookie
2.get_cookies()---->获取本网站所有本地cookies
3.add_cookie(cookie_dict)---->添加cookie
cookie_dict:一个字典对象,必选的键包括:“name” and“value”

cookie 应用场景

需求:使用cookie实现跳转至登录
手动输入百度,获取cookie
使用获取到的cookie,达到登录目的,然后就可以执行登录之后的操作

import time
from selenium import webdriver
from time import sleep

#COOKIE操作
driver=webdriver.Chrome()
#获取cookie信息
#3.使用selenium内的add_cookie('name'='BUDSS','value'='XXXXX')
#设置cookie
driver.get('http://www.baidu.com')
sleep(5)
driver.add_cookie({'name':'BDUSS','value':'WJsdWI2THB1eDVwSX5RZkRrTVVMR1l0R01ManNPYUhDYUVxdzdGaTJJY2JoUlpoRVFBQUFBJCQAAAAAAAAAAAEAAADeW5jLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABv47mAb-O5gM'})
sleep(3)
#刷新,必须操作,才能看到效果
driver.refresh()

#获取所有cookie信息
cookies=driver.get_cookies()
print(cookies)


sleep(10)
driver.quit()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值