软件测试 零基础自学笔记_web自动化

Selenium

selenium安装

  • webdriver
  • IDE
  • GRIDE

通过pip安装selenium

pip install selenium

driver下载

淘宝镜像
下载对应版本的driver

环境配置

  • python环境
  • selenium环境
  • 下载浏览器对应的driver版本
  • driver配置环境变量【将driver的地址配置到环境变量PATH中】
  • 在python中import对应的依赖
from selenium import webdriver
def test_selenium():
	driver = webdriver.Chrome()
	driver.get("https:/www.baidu.com/")

多窗口

获得窗口的唯一用句柄,切换句柄就接换成窗口

多窗口处理流程

  • 先获取当前窗口的句柄driver.current_window_handle
  • 再获取所有窗口句柄driver.window_handles
  • 判断是否是想要操作的窗口,如果是就操作,如果不是就跳转到另一个窗口,对另一个窗口进行操作driver.switch_to_window

例子

from selenium import webdriver
class TestWindows():
    def setup(self):
        self.driver = webdriver.Chrome()
        self.driver.implicitly_wait(3)
    def teardown(self):
        self.driver.quit()
    def test_window(self):
        self.driver.get("http://baidu.com")
        self.driver.find_element_by_partial_link_text("登录").click()
        self.driver.find_element_by_partial_link_text("立即注册").click()
        Windows = self.driver.window_handles
        self.driver.switch_to.window(Windows[-1])
        

alert窗口

使用driver.switch_to.alert()将driver切换到alert窗口
text返回(获取)alert/confirm/prompt中的文字信息
accept()接受现有警告框,点击确定暗流
dismiss()放弃现有警告框,放弃
send_Keys(keysToSend)发送文本至警告框

frame介绍

  • frame在html中的框架,在html中,所谓的框架就是可以在同一个浏览器中显示不止一个页面。
  • 基于html的框架又分为垂直框架和水平框架(cols,rows)

frame分类

  • frame标签包含frameset、frame、iframe三种
  • frameset和普通标签一样,可以用index、id、name、webelement任一种方式定位frame
  • frame与iframe对selenium定位而言是一样的,selenium有一组方法对frame进行操作

多frame切换

frame存在两种,一种是嵌套的一种是未嵌套的

  • driver.switch_to_frame()根据元素id或者index切换frame
  • driver.switch_to.default_content()切换到默认frame
  • driver.switch_to.parent_frame()切换到父级frame

frame嵌套

对于嵌套的先进入到iframe的父节点,再进入子节点,对子节点的对象进行处理和操作。
driver.switch_to.frame("父节点")
driver.switch_to.frame("字节点")

多浏览器

from selenium import webdriver
import os
class Base():
	def setup(self):
		browser = os.getenv("browser")
		if browser == 'firefox':
			self.driver = webdriver.Firefox()
		elif browser == 'headless':
			self.driver = webdriver.PhantomJS()
		else:
			self.driver = webdriver.Chrome()
		self.driver.implicitly_wait(5)
		self.driver.maximize_window()
	def teardown(self):
		self.driver.quit()

等待方式

直接等待、隐式等待、显式等待

直接等待

time.sleep(3)  #强制等待三秒钟,线程休眠一定时间

隐式等待

设置一个等待时间,轮询查找元素是否出现,如果没出现就抛出异常

self.driver.implicitly_wait(3)  # 隐式等待三秒钟

显式等待

在代码中定义等待条件,当条件发生时才继续执行代码

from selenium.webdriver.support.wait import WebDriverWait
class TestWait:
	def test_wait(self):
		def wait(x):
			return len(self.driver.find_elements(By.XPATH,'//*[@class="table-heading"]')) >= 1
		# 如果找到@class="table-heading"的元素 就执行
		WebDriverWait(self.driver,10 )until(wait) 

上例子中 的wait(x)可以用 expected_conditions.xx来实现

from selenium.webdriver.support import expected_conditions
WebDriverWait(self.driver,10 )until(expected_conditions.element_to_be_clickable((By.XPATH,'//*[@class="table-heading"]'))# 如果@class="table-heading"元素可以被点击,就继续

定位

ID定位

find_element_by_id("id名")

find_element(By.ID,'kw').send_keys("阿巴阿巴阿巴")
# 向ID为kw的控件输入"阿巴阿巴阿巴"
find_element(By.ID,'su').click()
# 点击ID为su的控件

XPATH定位

find_element_by_xpath("xpath")

XPATH由四种书写方式:

  • 绝对路径方式
    /html/body/div/div/div[3]/div/div/form/span/input
  • 元素属性方式
    //input[@id='kw']
  • 父子关系及元素属性混合定位
    //form[@id='form']/span/inpout
  • 使用逻辑运算符
    //input[@id='kw' and @class='su']
from selenium.webdriver.common.by impotr By

self.driver.find_element(By.XPATH,'//*[@title="主题"]').click() 

name定位

find_element_by_name("name属性值")

class name定位

find_element_by_class_name("id属性值")

link text定位

find_element_by_link_text("连接的显示文本")

tag name定位

find_element_by_tag_name("标签名")

partal link text定位

find_element_by_partal_link_text("部分链接的显示文本")

css定位

类选择器

find_element_by_css_selector(".sipt")

ID选择器

find_element_by_css_selector("#su")

*

表示全部选择

element选择器

find_element_by_css_selector("p")

父子关系定位

find_element_by_css_selector("form#form > span > input")

属性定位

find_element_by_css_selector("input[name='n1']")

XPATH定位与 CSS定位的对比

在这里插入图片描述

操作

鼠标时间webdriver中封装了ActionChains类,可以通过导包来进行调用。

form selenium.webdriver.common.action_chains import ActionChains

悬停

鼠标悬停到目标元素

ActionChains(driver).move_to_element_by_id("元素id").perform()

点击

定位需要点击的元素,使用click()

self.driver.find_element_by_id("元素id").click()

右键

ActionChains(driver).context_click(driver.find_element_by_id("元素id")).perform()

拖拽

先调用ActionChains,再定义拖拽起点与终点,再执行拖拽。

from selenium.webdriver import ActionChains
from selenium import webdriver


class TestDrag:
    def setup(self):
        self.driver = webdriver.Chrome()
        self.driver.implicitly_wait(3)

    def teardown(self):
        self.driver.quit()

    def test_drag(self):
        self.driver.get("网址")
        drag = self.driver.find_element_by_id("起点id")
        drop = self.driver.find_element_by_id("终点id")
        action = ActionChains(self.driver)
        action.drag_and_drop(drag, drop).perform()

键盘操作

需要先导包form selenium.webdriver.common.keys import keys

输入

文本

self.driver.find_element_by_id("元素id").send_keys("阿巴阿巴阿巴")

删除键

self.driver.find_element_by_id("元素id").send_keys(Keys.Back_SPACE)

空格键

self.driver.find_element_by_id("元素id").send_keys(Keys.SPACE)

制表键

self.driver.find_element_by_id("元素id").send_keys(Keys.TAB)

esc键

self.driver.find_element_by_id("元素id").send_keys(Keys.ESCAPE)

回车键

self.driver.find_element_by_id("元素id").send_keys(Keys.ENTER)

全选

self.driver.find_element_by_id("元素id").send_keys(Keys.CONTROL'A')

复制

self.driver.find_element_by_id("元素id").send_keys(Keys.CONTROL'C')

剪切

self.driver.find_element_by_id("元素id").send_keys(Keys.CONTROL'X')

粘贴

self.driver.find_element_by_id("元素id").send_keys(Keys.CONTROL'V')

清除

self.driver.find_element_by_id("元素id").clear()

查询信息

查询控件是否显示

driver.find_element_by_id("元素id").is_displayed()

查询控件是否可用

driver.find_element_by_id("元素id").is_enabled()

查询控件是否选中

driver.find_element_by_id("元素id").is_selected()

返回信息

返回当前页面url

url=driver.current_url

返回当前页面title

title=driver.title

返回控件的显示文本

text=driver.find_element_by_xpath("xpath").text

获得控件的属性值

text=driver.find_element_by_xpath("xpath").get_attribute("value")

操作浏览器

控制浏览器窗口大小

指定尺寸

driver.set_window_size(1020,1080)

最大化

driver.maximize_window()

最小化

driver.minimize_window()

控制页面的前进后退与刷新

前进

driver.forward()

后退

driver.back()

刷新

driver.refresh()

截屏

driver.save_screenshot(r"e:\sss.png")
driver.get_screenshot_as_file("{}.{}".format("e:/aaa","png"))

关闭浏览器

driver.quit()

selenium执行JS

在selenium中调用js:

  • execute_script:执行js
  • return:可以返回js的结果
  • execute_script:arguments传参
self.driver.execute_script("return document.getElementById('su')")

文件上传

pass

katalon

与selenium IDE 相似,导出python+unitest的脚本,结合unitest使用。

使用

在浏览器工具中添加katalon即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值