Selenium

一、浏览器

1.操作浏览器的流程:

实例化一个驱动对象-》发送url打开被测页面-》定位元素、操作元素——》设置检查点,检查操作结果。

2.常用浏览器驱动使用:

引用链接:https://blog.youkuaiyun.com/VXadmin/article/details/89433821

Chrome:chromedriver.exe # 驱动下载链接:https://sites.google.com/a/chromium.org/chromedriver/home

Firefox:geckodriver.exe # 驱动下载链接:https://github.com/mozilla/geckodriver/releases

Edge:msedgedriver.exe # 驱动下载链接:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver

IE:IEDriverServer.exe # 驱动下载链接:http://selenium-release.storage.googleapis.com/index.html

驱动实例化:

driver = webdriver.Chrome() # Chrome浏览器

driver = webdriver.Firefox() # Firefox浏览器

driver = webdriver.Edge() # Edge浏览器

driver = webdriver.Ie() # Internet Explorer浏览器

3.元素定位:

3.1 语法

from selenium.webdriver.common.by import By

driver.find_element(By.*,value)

ID = “id”

XPATH = “xpath”

LINK_TEXT = “link text”

PARTIAL_LINK_TEXT = “partial link text”

NAME = “name”

TAG_NAME = “tag name”

CLASS_NAME = “class name”

CSS_SELECTOR = “css selector”

3.2 常见元素定位方法

3.2.1 下拉框
from selenium.webdriver.support.ui import Select
# 定位该下拉框
Select=driver.find_element_by_id('下拉框的id')
# 转换成下拉框格式,然后通过index方式选择
Select(Select).select_by_index(第几个选项') 
# 转换成下拉框格式,然后通过value方式选择
Select(Select).select_by_value(value)
# 转换成下拉框格式,然后通过可见文本方式选择
Select(Select).select_by_visible_text('山西省') 
3.2.2 单选按钮
#定位某个单选按钮,用click选定
driver.find_element_by_css_selector('[value="1"]').click()
3.2.3 时间控件
#日期控件可能加readonly属性,只能读取,需先删除readonly属性,才能输入日期,selenium无法删除属性,用Javascript代码,通过script脚本方式执行。
script = 'document.getElementById("date").removeAttribute("readonly")'
driver.execute_script(script)
# 删除readonly属性,日期控件可输入,先清空默认值
driver.find_element_by_id("date").clear()
# 在日期控件输入测试值
driver.find_element_by_id("date").send_keys("1980-02-02")
3.2.4 文件上传

真正负责上传文件的控件是<input type="file" ...>

#找到上传图片或者文件的地方,点击打开上传文件页面
driver.find_element_by_link_text("商品图册").click()
# 定位正真负责上传文件的HTML控件位置(有inputtype=file属性),发送需要上传图片/文件的绝对路径。
driver.find_element_by_name("file").send_keys("D:/quekou.png")

4.元素常用操作方法:

*.click()

*.send_keys("*") # 追加写,不会清除原有字符

*.clear()

*.submit()

*.text # 获取控件文本信息

driver.current_url # 获取驱动当前url

5.焦点切换:

5.1 切换浏览器窗口

driver.windows_handles[-1] # 获取浏览器新打开窗口句柄
driver.switch_to.window(new_window)

5.2切换弹出窗

driver.switch_to.alert(.accept()、.dismiss()、text())

5.3切换Frame

元素存在却定位不到,原因一个网页有多个HTML嵌套而成,需先切换到对应的HTML才能操作该HTML中的元素,将鼠标移动元素所在html代码body部分,未包含该网页全部,则存在页面嵌套。

#(1)iframe设置了id或者name属性值(switch_to.frame()默认支持id或者name方法定位)
driver.switch_to.frame('id或者name属性值')
#(2)未设置id或者name属性值,需要先定位框架(支持八种定位方法),再切换。
iframe = driver.find_element_by_tag_name("iframe")
driver.switch_to.frame(iframe)

6显示等待:

参考文章:https://blog.youkuaiyun.com/dghrty_show/article/details/105061086

from selenium.webdriver.support.wait import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

element=WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None).until(EC.method,message="")

WebDriverWait()参数说明:

driver:浏览器驱动

timeout:最长超时时间,默认以秒为单位

poll_frequency:检测的间隔步长,默认为0.5s

ignored_exceptions:超时后的抛出的异常信息,默认抛出NoSuchElementExeception异常。

message:错误提示信息

until()/until_not():

#调用该方法提供的驱动程序作为参数,直到返回值为True
WebDriverWait(driver,10).until(method,message="")
#调用该方法提供的驱动程序作为参数,直到返回值为False
WebDriverWait(driver,10).until_not(method,message="")

常用method

#判断元素是否可见(可见代表元素非隐藏,并且元素宽和高都不等于 0)
visibility_of_element_located
#判断元素是否出现
presence_of_element_located
#判断某个元素中是否可见并且可点击
element_to_be_clickable
#判断页面上是否存在 alert
alert_is_present
#判断某个元素是否被选中了,一般用在下拉列表
element_to_be_selected

7 键盘操作:

from selenium.webdriver.common.keys import Keys

driver.find_element(By.*,value).send_keys('上海',Keys.DOWN,Keys.ENTER)

说明:send_keys()支持传入多个参数,传入“键盘按键”时相当于在键盘上点击该按键,传入多个依次点击。

selenium模拟键盘操作

8.断言

8.1思路

  • 操作后刷新页面新出现元素是否可以检测到

  • 操作后有URL变化的,可以通过URL判断,获取当前URL:result = self.driver.current_url

  • 操作后之前页元素是否不可见

8.2写if语句判断

8.3 assert方法

selenium自带类库

方式一

# 断言a和b是否相等,相等则测试用例通过。
assertEqual(a,b,[msg='测试失败时打印的信息'])
#断言a和b是否相等,不相等则测试用例通过。
assertNotEqual(a,b,[msg='测试失败时打印的信息'])
#断言a是否在b中,在b中则测试用例通过。
assertIn(a,b,[msg='测试失败时打印的信息'])
 #断言a是否在b中,不在b中则测试用例通过。
assertNotIn(a,b,[msg='测试失败时打印的信息'])

方式二

# 断言标题包含
assert '百度新闻' in dr.title    

8.4 try except else

try:存放测试代码

except

try中代码运行产生异常时,执行except模块,except可以有多个(但只执行其中一个),每个都可以处理一种或者多种异常(例:except (IndexError, ValueError, ArithmeticError):)。

所有的异常对象都包含了几个常用属性和方法,可以通过as为异常对象声明变量,来访问异常对象的相关信息:

args:该属性返回异常的错误编号和描述字符串。

errno:该属性返回异常的错误编号。

strerror:该属性返回异常的描述宇符串。

with_traceback():通过该方法可处理异常的传播轨迹信息。

def foo():
    try:
        fis = open("a.txt");
    except Exception as e:
        # 访问异常的错误编号和详细信息
        print(e.args)
        # 访问异常的错误编号
        print(e.errno)
        # 访问异常的详细信息
        print(e.strerror)
    else:
        print("123")

else:无论是否异常都执行的代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值