selenium

1.selenium概念:

功能自动化测试工具;ThroughtWorks公司一个强大的开源Web功能测试工具系列

2.优势:

免费
小巧
支持多平台:chrome firefox adge Opera
支持分布式:selenium ,gird
支持多语言:python,java,c#,ruby,javaScript

3.selenium工具集

selenium1:
selenium IDE 将录制生成的测试用例导出为WebDriver所支持的各种编程语言
selenium grid 支持分布式测试
selenium RC 运行JavaScript

selenium2:
selenium1+webdriver

selenium3:
增加了edge和Safari浏览器的原生驱动

webDriver通过原生浏览器或者浏览器扩展直接控制浏览器
面试:webdriver的原理?
工程师:自动化测试代码发送给驱动
驱动;解析自动化测试的代码,解析后发送给浏览器;
浏览器:浏览器执行驱动发来的指令

出租车司机:
在这里插入图片描述

1.webDriver api
2.浏览器驱动:
每个浏览器都有自己的驱动,均已EXE文件存在
3.浏览器

具体执行过程:
对于每一条Selenium脚本,一个http请求会被创建并且发送给浏览器的驱动
浏览器驱动中包含了一个HTTP Server,用来接收这些http请求
HTTP Server接收到请求后根据请求来具体操控对应的浏览器
浏览器执行具体的测试步骤
浏览器将步骤执行结果返回给HTTP Server
HTTP Server又将结果返回给Selenium的脚本,如果是错误的http代码我们就会在控制台看到对应的报错信息。

4.webDriver API:

元素的定位:
name
id
class name
Xpath//XPath 是一种在XML 文档中定位元素的语言。
css//
link text//链接
tag name//标签名称
Partial ink text//部分链接定位
只要属性在这个页面唯一,都可以定位
存在并且唯一

对元素的操作
操作测试对象:
click()//先定位,对测试对象进行操作
send_keys()//模拟键盘文字输入,输入地址,在输入框里输入内容

submit()//提交表单
把“百度一下”的操作从click 换成submit 可以达到相同的效果

clear()//如果可以的话,清除输入框中的内容
text//用于获取元素的文本信息
有问题?、、
title
url

等待

固定等待:
time.sleep()
只能选择一个固定的时间的等待

智能等待
implicitly_wait() //只要找到了元素就开始执行,没在时间范围内找到,就超时
可以在一个时间范围内智能的等待
隐式地等待一个无素被发现或一个命令完成;这个方法每次会话只需要调用一次time_to_wait: 等待时间

alert的处理:
switch_to.alert accept()

打印信息:
print()

浏览器的控制
browser.maximize_window() #将浏览器最大化显示
browser.set_window_size(480, 800)#设置浏览器的窗口大小

浏览器的前进,后退
driver.back()
driver.forward()

滚动条

浏览器的滚动条拖到最底端
#将页面滚动条拖到底部
js=“var q=document.documentElement.scrollTop=10000”
driver.execute_script(js)

顶端
#将滚动条移动到页面的顶部
js=“var q=document.documentElement.scrollTop=0”
driver.execute_script(js)

execute_script(script, *args),在当前窗口/框架同步执行javaScript

#同时控制浏览器的左右,上下
js = “window.scrollTo(200,200);”
browser.execute_script(js)

键盘用法:
from selenium.webdriver.common.keys import Keys #需要引入keys 包
send_keys(Keys.TAB)//换行
send_keys(Keys.ENTER)//相当于click()

driver.find_element_by_id(“account”).clear()
time.sleep(3)
driver.find_element_by_id(“account”).send_keys(“demo”)
time.sleep(3)
#tab 的定位相当于清除了密码框的默认提示信息,等同上面的clear()
driver.find_element_by_id(“account”).send_keys(Keys.TAB)
time.sleep(3)
#通过定位密码框,enter(回车)来代替登陆按钮
driver.find_element_by_name(“password”).send_keys(Keys.ENTER)
‘’’
#也可定位登陆按钮,通过enter(回车)代替click()
driver.find_element_by_id(“login”).send_keys(Keys.ENTER)

邮箱:不能自动化脚本执行
防止恶意登录

键盘组合:

#输入框输入内容
driver.find_element_by_id(“kw”).send_keys(“selenium”)
time.sleep(3)
#ctrl+a 全选输入框内容
driver.find_element_by_id(“kw”).send_keys(Keys.CONTROL,‘a’)
time.sleep(3)
#ctrl+x 剪切输入框内容
driver.find_element_by_id(“kw”).send_keys(Keys.CONTROL,‘x’)

鼠标事件
from selenium.webdriver.common.action_chains import ActionChains
//ActionChains 类

context_click() 右击
double_click() 双击
drag_and_drop(,) 拖动,原位置移动到目标位置
move_to_element() 移动鼠标到一个元素中
perform()//执行所有存储的行为
ActionChains(driver)//生成用户的行为,所有行为都存储在actionChains对象中

driver.find_element_by_id("kw").send_keys("赵丽颖")
s=driver.find_element_by_id("kw")
s1=driver.find_element_by_id("su")
ActionChains(driver).context_click(s).perform()
ActionChains(driver).double_click(s1).perform()
title=driver.find_element_by_id("su")
target=driver.find_element_by_link_text("赵丽颖_百度百科")
ActionChains(driver).drag_and_drop(title, target).perform()
time.sleep(5)
ActionChains(driver).move_to_element(target).perform()

定位一组元素:find_Elements_by_tag_name

get_attribute:获得属性值

file_path='file:///'+os.path.abspath("C:/Users/86187/Desktop/selenium2html/checkbox.html")
driver.get(file_path)
inputs=driver.find_elements_by_tag_name('input')
for input in inputs:
if input.get_attribute('type') == 'checkbox':
input.click()

上传文件操作:
/==
上传过程一般要打开一个本地窗口,1.从窗口选择本地文件添加
2.只要定位上传按钮,通过send_keys 添加本地文件路径就可以了。绝对路径和相对路径都可以,关键是上传的文件存在。

river = webdriver.Firefox()
file_path = 'file:///'+os.path.abspath("C:/Users/86187/Desktop/selenium2html/upload.html")
driver.get(file_path)
driver.find_element_by_name("file").send_keys("C:\\Users\\86187\\Desktop\\1.jpg")
time.sleep(5)
driver.quit()

多层窗口定位
有可能嵌套的不是框架,而是窗口,还有真对窗口的方法:switch_to.window()

用法与switch_to.frame 相同:
driver.switch_to_window(“windowName”)

对多层框架的处理:frame
switch_to.frame(“f1”);//从默认页面跳转到f1
switch_to.default_content()//让页面跳转回原来的默认页面

如果早多层框架中定位元素,首先要确定这个元素在哪一个框架里面,然后向这个框架,在做响应处理

driver = webdriver.Firefox()
file_path='file:///'+os.path.abspath("C:/Users/86187/Desktop/selenium2html/frame.html")
driver.get(file_path)
driver.switch_to.frame("f1")
driver.switch_to.frame("f2")
driver.find_element_by_id("kw").send_keys("欢天喜地七仙女")
driver.find_element_by_id("su").submit()

time.sleep(5)
driver.switch_to.default_content()
driver.switch_to.frame("f1")
driver.find_element_by_link_text("click").click()
time.sleep(5)
driver.quit()

层级定位

file_path='file:///'+os.path.abspath("C:/Users/86187/Desktop/selenium2html/level_locate.html")
driver.get(file_path)
driver.find_element_by_link_text("Link1").click()
s=driver.find_element_by_link_text("Action")
ActionChains(driver).move_to_element(s).perform()
time.sleep(5)
driver.quit()

下拉框处理:
循环
数组下标
xPath

file_path = 'file:///'+os.path.abspath("C:/Users/86187/Desktop/selenium2html/drop_down.html")
driver.get(file_path)
driver.find_element_by_xpath("//*[@value='8.34']").click()

lists=driver.find_elements_by_tag_name("option")
for list in lists:
if list.get_attribute("value")=="9.03":
list.click()

lists[5].click()

alert、confirm、prompt 的处理

alert=switch_to.alert//得到弹出框的句柄
alert.accept()//点击确认,关闭弹框
alert.send_keys()
alert.dismiss()//点击取消按钮

text 返回alert/confirm/prompt 中的文字信息
accept 点击确认按钮
dismiss 点击取消按钮,如果有的话
send_keys 输入值,这个alert\confirm 没有对话框就不能用了,不然会报错

关闭弹出框:
driver.find_element_by_id(“tooltip”).click()
#得到弹出框的句柄
alert = driver.switch_to.alert
#点击确认,关闭弹框
alert.accept()
print(“text”+alert.text)

弹出框中输入信息:
alert.send_keys()

driver.find_element_by_tag_name(“input”).click()
alert = driver.switch_to.alert
alert.send_keys(“我是马敬妮”)
time.sleep(5)
alert.accept()
alert.dismiss()

div对话框

#点击click
driver.find_element_by_link_text("Click").click()
time.sleep(5)
#点击click me
div1=driver.find_element_by_class_name("modal-body")
div1.find_element_by_link_text("click me").click()
time.sleep(5)
#关闭alert
div2=driver.find_element_by_class_name("modal_footer")
driver.find_element_by_class_name("btn").click()
#driver.find_element_by_class_name("btn btn-primary")

div2 = driver.find_element_by_class_name("modal-footer")
buttons = div2.find_elements_by_tag_name("button")
buttons[0].click()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值