3.1selenium自动化测试基本操作

自动化测试工具

自动化测试工具:

  • QTP
  • jmeter: 性能测试工具 设置/录制脚本 接口测试
  • loadrunner: 性能测试工具 UI界面录制
  • soupUI : 接口测试功能 postman
  • appium: APP自动化测试工具 Macaca MOnkey

selenium 工具集的特点:

  • 轻量级
  • 支持多语言:ruby Python java C#等
  • 支持多平台 Windows Mac
  • 支持多浏览器 Firefox IE Chrome edge Safari Opera
  • 支持分布式测试 selenium grid
  • 免费

selenuim API

使用selenuim API需要先进行导包操作

  • from selenium improt webdriver

选择操控那个浏览器

  • webdriver.Chrome()
  • webdriver.Firefox()
    在这里插入图片描述

元素的定位

​ 如何进行元素的定位是自动化测试的核心,要想操作一个对象,首先应该识别这个对象,每一个对象都会由很多特征(属性)。

元素的属性
  • id

  • name

  • class name(类名)

  • link text

  • partial link text

  • tag name(标签名)

  • xpath

  • css selector

    元素的定位实例

import time

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("https://baidu.com/")

# 百度搜索框的元素
# <input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">

# 1.使用name对元素进行定位并使用send_keys输入字段
# driver.find_element_by_name("wd").send_keys("selenium")

# 2.使用tag_name标签名来进行元素定位  注意input标签通常不止一个
# driver.find_element_by_tag_name("input").send_keys("selenium")

# 3.通过元素的class name进行定位
# driver.find_element_by_class_name("s_ipt").send_keys("selenium")

# css定位 直接复制selector
driver.find_element_by_css_selector("#kw").send_keys("selenium")
# xpath定位 直接复制xpath
# driver.find_element_by_xpath("//*[@id='kw']").send_keys("selenium")

# 点击按钮的元素
# <input type="submit" value="百度一下" id="su" class="btn self-btn bg s_btn">
# 使用id进行定位并进行点击事件
driver.find_element_by_id("su").click()

# link text 定位
# 咨询元素
#<a href="https://www.baidu.com/s?rtt=1&amp;bsst=1&amp;cl=2&amp;tn=news&amp;ie=utf-8&amp;word=seleium" wdfield="word" οnmοusedοwn="return c({'fm':'tab','tab':'news'})" sync="true" class="s-tab-item s-tab-news">资讯</a>
time.sleep(3)
driver.find_element_by_link_text("资讯").click()

time.sleep(3)
# Partial link text定位
driver.find_element_by_partial_link_text("视").click()

time.sleep(6)  #
# 智能等待,隐式的等待一个元素被发现或者一个命令完成
# driver.implicitly_wait()


driver.quit()  # 会进行资源的关闭
# driver.close()  # 只会将浏览器进行关闭

元素的操作

  • click 点击对象
  • send_keys 在对象上模拟按键输入
  • clear 如果可以的话,清除对象的内容
  • submit 如果可以的话,提交表单
# coding=utf-8

# 操作测试对象
from selenium import webdriver
import time

driver = webdriver.Chrome()

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

time.sleep(3)

# xpath定位 直接复制xpath 找到搜索框
find = driver.find_element_by_xpath("//*[@id='kw']")
time.sleep(3)
var = driver.find_element_by_xpath("//*[@id='bottom_layer']/div/p[1]/a").text
print(var)

find.send_keys("selenium")

time.sleep(3)
find.clear()
time.sleep(3)
find.send_keys("selenium")
# 模拟点击
time.sleep(3)
# find.click()
# 提交表单
find.submit()
time.sleep(3)

driver.quit()

打印tile以及url,text信息

text 用于获取元素的文本信息

# coding=utf-8

# 操作测试对象
from selenium import webdriver
import time

driver = webdriver.Chrome()

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

time.sleep(3)

# xpath定位 直接复制xpath 找到搜索框
find = driver.find_element_by_xpath("//*[@id='kw']")
time.sleep(3)
var = driver.find_element_by_xpath("//*[@id='bottom_layer']/div/p[1]/a").text
print("title = " + driver.title)
print("rul = " + driver.current_url)
print("text = " + var)
find.send_keys("selenium")

find.submit()
time.sleep(3)

driver.quit()

浏览器的操作

设置大小
前进后退
滚动条控制
from selenium import webdriver
import time

browser = webdriver.Chrome()
browser.get("https://baidu.com/")
# print("浏览器最大化")
# browser.maximize_window()
# time.sleep(4)
# browser.set_window_size(1500, 500)
# time.sleep(4)

print(browser.current_url)
browser.find_element_by_id("kw").send_keys("没啥")
browser.find_element_by_id("su").click()
print(browser.current_url)

time.sleep(3)
# js语句执行,将滚动条拖到10000,大多数情况也就是到了底部
js = "var q=document.documentElement.scrollTop=10000"
browser.execute_script(js)
time.sleep(3)
# 0为顶部
js = "var q=document.documentElement.scrollTop=0"
browser.execute_script(js)

time.sleep(6)
browser.back()
# 后退
print(browser.current_url)
time.sleep(3)
# 前进
browser.forward()
time.sleep(3)
browser.quit()

模拟键盘和鼠标事件

  • 键盘事件

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

send_keys(Keys.TAB) # TAB
send_keys(Keys.ENTER) # 回车

键盘组合键的用法

#ctrl+a 全选输入框内容
driver.find_element_by_id(“kw”).send_keys(Keys.CONTROL,‘a’)

  • 鼠标事件

需要导包 from selenium.webdriver.common.action_chains import ActionChains

context_click() 右击
double_click() 双击
drag_and_drop() 拖动
move_to_element() 移动

ActionChains(driver) :生成用户的行为。所有的行动都存储在actionchains 对象。通过perform()存储的行为。
move_to_element(menu) :移动鼠标到一个元素中,menu 上面已经定义了他所指向的哪一个元素
perform() :执行所有存储的行为

定位一组元素

from selenium import webdriver
import time
import os

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

# driver.find_element_by_id("kw").send_keys("吴亦凡")
# driver.find_element_by_id("su").click()
file_path = "file:///" + os.path.abspath("../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()

time.sleep(8)
driver.quit()

多层框架/窗口定位

  • switch_to_frame() 框架
  • switch_to_window() 窗口
import time

from selenium import webdriver
import os

driver = webdriver.Chrome()
file = "file:///" + os.path.abspath("../selenium2html/frame.html")
driver.get(file)
time.sleep(2)
driver.switch_to_frame("f1")
driver.switch_to_frame("f2")
driver.find_element_by_id("kw").send_keys("sadfasdf")
driver.find_element_by_id("su").click()
time.sleep(5)

driver.quit()

层级定位

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

from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Chrome()

file = "file:///" + os.path.abspath("../selenium2html/level_locate.html")
driver.get(file)
time.sleep(5)
# 定位思路:
# 具体思路是:先点击显示出1个下拉菜单,然后再定位到该下拉菜单所在的ul,再定位这个ul 下的某个具体的link。
# 在这里,我们定位第1个下拉菜单中的Action 这个选项。
driver.find_element_by_link_text('Link1').click()
time.sleep(1)
mm = driver.find_element_by_link_text("Another action")
ActionChains(driver).move_to_element(mm).perform()
time.sleep(5)
driver.quit()

下拉框的处理

下拉框需要两次处理

首先定位到下拉框,接着定位到下拉框的选项

from selenium import webdriver
import time
import os
file = "file:\\" + os.path.abspath("../selenium2html/drop_down.html")
driver = webdriver.Chrome()
driver.get(file)
time.sleep(3)
dd = driver.find_element_by_id("ShippingMethod")
dd.click()
dd.find_element_by_xpath("//*[@id='ShippingMethod']/option[1]").click()

time.sleep(3)
driver.quit()

alert、confirm、prompt 的处理

text 返回alert/confirm/prompt 中的文字信息

  • accept 点击确认按钮
  • dismiss 点击取消按钮,如果有的话
  • send_keys 输入值,#未验证这个alert\confirm 没有对话框就不能用了,不然会报错

注意:switch_to_alert()只能处理原生的alert

from selenium import webdriverimport timeimport osdriver=webdriver.Chrome()file = "file:///" + os.path.abspath("../selenium2html/alert.html")driver.get(file)time.sleep(2)driver.maximize_window()driver.find_element_by_id("tooltip").click()time.sleep(2)driver.switch_to_alert().accept()time.sleep(5)driver.quit()

DIV对话框

from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsimport timeimport osdriver=webdriver.Chrome()file = "file:///" + os.path.abspath("../selenium2html/modal.html")driver.get(file)time.sleep(2)dr = driver.find_element_by_css_selector("#show_modal")dr.click()time.sleep(2)dr.find_element_by_xpath("//*[@id='myModal']").find_element_by_id("click").click()dr.find_element_by_xpath("//*[@id='myModal']/div[3]").click()time.sleep(3)driver.quit()

上传文件

文件上传操作也比较常见功能之一,上传功能没有用到新有方法或函数,关键是思路。

上传过程一般要打开一个本地窗口,从窗口选择本地文件添加。所以,一般会卡在如何操作本地窗口添加上传文件。

其实,在selenium webdriver 没我们想的那么复杂;

只要定位上传按钮,通过send_keys 添加本地文件路径就可 以了。

绝对路径和相对路径都可以,关键是上传的文件存在。

from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsimport timeimport osdriver = webdriver.Chrome()file = "file:///" + os.path.abspath("../selenium2html/upload.html")driver.get(file)driver.implicitly_wait(2)driver.find_element_by_tag_name("input").send_keys("D:\\pythonProject1\\pythonProject\\bit\\selenium2html\\upload.html")time.sleep(2)driver.quit()
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值