自动化测试selenium

自动化测试selenium

Selenium是web应用中基于UI的自动化测试框架,支持多平台、多浏览器、多语言。

1.定位元素的方式

from selenium import webdriver
import time

#获取被控制浏览器的驱动,Chrome
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")

# 1.通过元素id定位,并向元素输入相应的内容
# driver.find_element_by_id("kw").send_keys("666")
# 2.通过元素name定义,但是要有唯一的name才可以
# driver.find_element_by_name("wd").send_keys("777")
# 3.通过class name定位
# driver.find_element_by_class_name("s_ipt").send_keys("888")
# 4.通过css进行定位:chrome的F12开发者模式中Element-右键-copy-copy selector来获取
# driver.find_element_by_css_selector("#kw").send_keys("999")
# 5.通过XPath进行定位:chrome的F12开发者模式中Element-右键-copy-copy xpath来获取
# driver.find_element_by_xpath("//*[@id='kw']").send_keys("1010")
# 6.link test进行定位:页面上的文字链接,需要文字唯一且存在,不然会报错
# driver.find_element_by_link_text("图片").click()
# 7.Partial link text定位:通过部分链接定位
driver.find_element_by_partial_link_text("图片").click()

# 通过元素id定位到元素,并进行点击操作
# driver.find_element_by_id("su").click()

time.sleep(5)
# 退出并关闭窗口
driver.quit()

2.操作测试对象

from selenium import webdriver
import time

# 定位之和需要对对象进行操作

driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")


# 1.send_keys给操作对象输入文本信息
# driver.find_element_by_id("kw").send_keys("666")
# 2.click点击操作对象
# driver.find_element_by_id("su").click()
# 3.submit提交表单,达到与click一样的效果
# driver.find_element_by_id("su").submit()
# 4.text获取元素文本:输出了文本,但是因为浏览器的防御措施,倒置文本显示不出来
# data = driver.find_element_by_id("bottom_layer").text
# print(data)
# 5.clear去除操作对象的内容
driver.find_element_by_id("kw").send_keys("666")
driver.find_element_by_id("kw").clear() #去除了上面的666
driver.find_element_by_id("kw").send_keys("hhh")
driver.find_element_by_id("su").submit()

# 添加等待:sleep休眠
time.sleep(5)

driver.quit()

3.添加等待

from selenium import webdriver
import time

driver = webdriver.Chrome();
driver.get("https://www.baidu.com/")

driver.find_element_by_id("kw").send_keys("666")
driver.find_element_by_id("su").click()

# 1.固定等待:必须等待参数设定的时间
# time.sleep(3)
# 2.智能等待:最多等待参数设定的时间,但是不一定等够足够这个时间
driver.implicitly_wait(5)

driver.quit()

4.打印消息

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")

# 打印
# 1.title打印页面:百度一下,你就知道
print(driver.title)
# 2.打印url:百度的网址
print(driver.current_url)


time.sleep(5)
driver.quit()

5.浏览器的操作

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")


# 五:浏览器的操作
# 1.浏览器最大化:maximize_window()
# driver.maximize_window() #将浏览器以最大的形式展示出来
# time.sleep(2)
# driver.find_element_by_id("kw").send_keys("666")
# driver.find_element_by_id("su").click()
# 2.设置浏览器的宽,高:set_window_size(width, high)
# driver.set_window_size(100,2000) #设置浏览器的长与高
# 3.浏览器的前进,后退
#浏览器的前进
# browser.forward()
#浏览器的后退
# driver.back()
# driver.find_element_by_id("kw").send_keys("666")
# driver.back() #浏览器后退
# driver.forward() #浏览器前进
# driver.find_element_by_id("kw").send_keys("777")
# driver.find_element_by_id("su").click()
# 4.控制浏览器滚动条
# 浏览器滚动条的控制需要依靠js脚本
driver.find_element_by_id("kw").send_keys("666")
driver.find_element_by_id("su").click()
time.sleep(2)
# 将页面滚动条拖到底部
js = "var q=document.documentElement.scrollTop=10000"
driver.execute_script(js)
time.sleep(2)
# 将滚动条移动到页面的顶部
js = "var q=document.documentElement.scrollTop=0"
driver.execute_script(js)

time.sleep(5)
driver.quit()

6.键盘事件

from selenium import webdriver
from selenium.webdriver.common.keys import Keys #需要引入keys 包
import os,time

# 键盘组合键用法
# send_keys(Keys.CONTROL,'a') #全选(Ctrl+A)
# send_keys(Keys.CONTROL,'c') #复制(Ctrl+C)
# send_keys(Keys.CONTROL,'x') #剪贴(Ctrl+X)
# send_keys(Keys.CONTROL,'v') #粘贴(Ctrl+V)

driver = webdriver.Chrome()
driver.get("http://demo.zentao.net/user-login-Lw==.html")
time.sleep(3)
driver.maximize_window() # 浏览器全屏显示

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)
'''
time.sleep(3)
driver.quit()

7.鼠标事件

  • 下面这段代码有一定的问题,但是基本操作没有太大的问题
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import time
driver = webdriver.Chrome()
driver.get("http://news.baidu.com")

# 这里有些问题,需要解决
qqq =driver.find_element_by_xpath(".//*[@id='s_btn_wr']")
ActionChains(driver).context_click(qqq).perform() #右键
ActionChains(driver).double_click(qqq).perform() #双击
# 定位元素的原位置
element = driver.find_element_by_id("s_btn_wr")
# 定位元素要移动到的目标位置
target = driver.find_element_by_class_name("btn")
# 执行元素的移动操作
ActionChains(driver).drag_and_drop(element, target).perform()

8.定位一组元素

from selenium import webdriver
import time
import os

# 定位一组元素

driver = webdriver.Chrome()

# file_path = "file:///" + os.path.abspath('D:/Java_sprint/cs/selenium2html/checkbox.html')
file_path = "file:///D:/Java_sprint/cs/selenium2html/checkbox.html"
driver.get(file_path)
time.sleep(3)
driver.maximize_window()

# 勾选里面所有的checkbox
# driver.find_element_by_id("c1").click()
# # driver.find_element_by_id("c2").click()
# # driver.find_element_by_id("c3").click()

# 定位一组tag name 都为input的元素
inputs = driver.find_elements_by_tag_name('input')
for input in inputs :
    if input.get_attribute('type') == 'checkbox':
        input.click()
time.sleep(2)
driver.quit()

9.多层框架窗口定位

  • 多层框架的操作
from selenium import webdriver
import time
import os

# 多层框架的操作

driver = webdriver.Chrome()

# url = "file:///" + os.path.abspath("C:\\课件\\我的课件\\测试\\selenium2/locateElement/selenium2html/frame.html")
url = "file:///D:/Java_sprint/cs/selenium2html/frame.html"
driver.get(url)
time.sleep(3)
driver.maximize_window()
# 从默认页面到 f1 框架页面
driver.switch_to.frame("f1")
driver.find_element_by_link_text("click").click()

# 回到默认页面
driver.switch_to.default_content()

# driver.switch_to_frame()


time.sleep(3)
driver.quit()

10.层级定位

from selenium import webdriver
import time
import os
from selenium.webdriver.common.action_chains import ActionChains

# 层级定位
driver = webdriver.Chrome()
# url = "file:///"+os.path.abspath("C:\\课件\\我的课件\\测试\\selenium2/locateElement/selenium2html/level_locate.html")
url = "file:///D:/Java_sprint/cs/selenium2html/level_locate.html"
driver.get(url)

driver.maximize_window()
# 定位link1,点击
driver.find_element_by_link_text("Link1").click()
driver.implicitly_wait(10)
# 定位 Another Action
action = driver.find_element_by_link_text("Another action")
# 高亮显示Another action, 把鼠标移动到 Another action上面
ActionChains(driver).move_to_element(action).perform()

time.sleep(6)
driver.quit()

11.下拉框操作

from selenium import webdriver
import time
import os

# 下拉框操作

driver = webdriver.Chrome()

url = "file:///D:/Java_sprint/cs/selenium2html/drop_down.html"

driver.get(url)
driver.maximize_window()

time.sleep(2)

m = driver.find_element_by_id("ShippingMethod")
# 1.使用xpath进行定位
m.find_element_by_xpath('//*[@id="ShippingMethod"]/option[3]').click()
# 2.定位一组元素,用该元素的特殊属性进行查找
options = driver.find_elements_by_tag_name("option")
# for option in options:
#     if option.get_attribute('value') == '9.03':
#         option.click()
# 3.通过数组的方式进行查找
options[3].click()

time.sleep(3)
driver.quit()

12.alert、confifirm、prompt 的处理

alert点击确认按钮
  • 获得弹框的操作句柄
  • 调用accept方法关闭弹框
from selenium import webdriver
import time
import os
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Chrome()
url = "file:///D:/Java_sprint/cs/selenium2html/alert.html#"
driver.get(url)
driver.maximize_window()
time.sleep(3)

# 定位元素,点击,使得弹出框出现
driver.find_element_by_id("tooltip").click()
time.sleep(3)

# 定位弹出框/获得弹出框的操作句柄
alert = driver.switch_to.alert
time.sleep(3)

# 关闭alert
alert.accept()

time.sleep(5)
driver.quit()


  • 向alect框中输入信息
from selenium import webdriver
import time
import os
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Chrome()
url = "file:///D:/Java_sprint/cs/selenium2html/send.html"
driver.get(url)
driver.maximize_window()
time.sleep(3)

driver.find_element_by_tag_name("input").click()
time.sleep(3)
# 先获得弹出框的操作句柄
alert = driver.switch_to.alert
# 向alert框输入消息
alert.send_keys("20岁")

time.sleep(4)
# 关闭信息展示弹框
alert.accept()

time.sleep(6)

driver.quit()

12.DIV对话框的处理

from selenium import webdriver
import time
import os
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Chrome()
url = "file:///D:/Java_sprint/cs/selenium2html/modal.html"
driver.get(url)
driver.maximize_window()
time.sleep(3)

# 点击click 出现弹框
driver.find_element_by_link_text("Click").click()
time.sleep(3)

# 点击div 框框里面的click me,让弹出框内容发生变化
div1 = driver.find_element_by_class_name("modal-body")
div1.find_element_by_link_text("click me").click()
time.sleep(4)

# 定位div 在定位具体的button
div2 = driver.find_element_by_class_name("modal-footer")
# 使用数组的方式定义
buttons = driver.find_elements_by_tag_name("button")
buttons[0].click()
time.sleep(6)

driver.quit()

13.上传文件操作

from selenium import webdriver
import time
import os

# 上传文件

driver = webdriver.Chrome()
url = "file:///D:/Java_sprint/cs/selenium2html/upload.html"
driver.get(url)
driver.maximize_window()
time.sleep(3)

# 上传文件,send_keys-文件的绝对路径
driver.find_element_by_name("file").send_keys("D:/Java_sprint/cs/selenium2html/upload.html")

time.sleep(6)
driver.quit()
  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伦敦看日出

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值