selenium史上非常全非常全面的常用命令【持续更新】

webdriver常用的类

  • Webdriver类 :元素定位、打开浏览器、元素获取,切换页面
  • ActionChains类 :鼠标操作、悬停、点击、双击、右击等
  • select类 :下拉框的处理
  • switchTo类:用来做切换,不同的表单、窗口

- Webdriver类 :元素定位、打开浏览器、元素获取,切换页面
from selenium import webdriver
dr = webdriver.Firefox()
dr.get()获取打开url网页
dr.set_windows_size()设置浏览器窗口大小
dr.find_element_by_id(‘kw’).clear()#清除内容
dr.find_element_by_id(‘su’).click()#点击
dr.find_element_by_id(‘kw’).send_keys(‘测试’) #发送文字内容
dr.current_url 当前浏览器的url连接
dr.title #网页标题
dr.find_element_by_id(‘kw’).text #元素文本
dr.find_element_by_id(‘kw’).content #元素原网页文本
dr.refresh #刷新
dr.save_screenshot(‘d://a.png’) #屏幕截图
dr.current_window_handle#当前窗体
dr.window_handles #所有窗体
element.submit() #提交
close()关闭单个窗体
quit()关闭所有的窗体

元素的定位以及操作

  • id
  • name
  • classname
  • linktext
  • partiallinktext
  • tagname
  • cssselector
  • xpath
    通过元素的ID定位元素:findElement(By.id(“ele”));
    通过元素的名称定位元素:findElement(By.name(“ele”));
    通过元素的html中的位置定位元素:findElement(By.xpath(“ele”));
    通过元素的标签名称定位元素:findElement(By.tagName(“ele”));
    通过元素的链接名称定位元素:findElement(By.LinkText(“ele”));
    通过元素的类名定位元素:findElement(By.className(“ele”));
    通过元素的css定位元素:findElement(By.cssSelector(“ele”);
    通过元素的部分链接名称定位元素:findElement(By.pareialLinkText(“ele”));
    对ID为ele的元素进行点击操作:driver.findElement(By.id(ele));

存储勾选情况:element.isSelected()
验证元素是否可展示:element.isDisplayed()
获取标签名称:element.getTagName()
获取指定属性的值:element.getAttribute()
存储可编辑状态:element.isEnabled()

操作鼠标事件

#导入鼠标基类
from selenium.webdriver.common.action_chains import ActionChains
#把浏览器驱动传ActionChains,调用__init__方法实现鼠标悬停
ActionChains(driver).move_to_element(ele).perform()
#将鼠标向右挪动100像素,向下挪动10像素
ActionChains(driver).move_to_element_with_offset(ele,100,10)
#双击
ActionChains(driver).double_click(ele).perform()
#右击
ActionChains(driver).context_click(ele).perform()
#拖动滑块
#先定位到这个滑块,往右拖动200像素

ele2 = driver.find_element_by_name(‘name’)
ActionChains(driver).drag_and_drop_by_offset(ele,200,0).perform()
#拖动滑块,从一个元素的位置开始拖动到另一个元素的位置停止
ele_start = driver.find_element_by_name(‘name’)
ele_end = driver.find_element_by_name(‘name2’)
ActionChains(driver).drag_and_drop(ele_start,ele_end)

键盘事件

#导入键盘事件
from selenium.webdriver.common.keys import Keys
#输入字符
driver.find_element_by_name(‘name’).send_keys(‘text’)
#退格
driver.find_element_by_name(‘name’).send_keys(Keys.BACK_SPACE)
#输入空格
driver.find_element_by_name(‘name’).send_keys(Keys.SPACE)
#全选,ctrl+A
driver.find_element_by_name(‘name’).send_keys(Keys.CONTROL,‘a’)
#复制
driver.find_element_by_name(‘name’).send_keys(Keys.CONTROL,‘c’)
#粘贴
driver.find_element_by_name(‘name’).send_keys(Keys.CONTROL,‘v’)
#回车
driver.find_element_by_name(‘name’).send_keys(Keys.ENTER)

三种时间的等待方式

import time
等待两秒,显示等待
time.sleep(2)
#隐式等待,等待元素已经出来了再运行,超过时间报错,时间内加载完成则继续进行
#如果后面没有其他类型的等待设置,则默认是全局性的参数,后面的动作都会按这个设定进行等待
driver.implicitly_wait(10)
#webdriver自带的时间等待
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
#调用driver,等待5秒,每5秒时间检测一次,直到这个元素出现,如果取反则用until_not(直到这个空间不出现)
testWite = WebDriverWait(driver,5,0.5).until(EC.presence_of_all_elements_located(By.ID,‘id’))

多窗口形态

#打印当前窗体信息(所有的窗体信息),如果有多个值显示的是list
print(driver.window_handles)
#打印当前焦点所在的窗体信息
print(driver.current_window_handle)
#切换窗体,后面是目前已经打开窗体的列表
driver.switch_to.window(driver.window_handles[1])
#小应用:切换窗体到最初的url页的窗体
now_handle = driver.current_window_handle
#click其它窗体
all_handles = driver.window_handles
for handle in all_handels:
if handle == now_handle:
driver.switch_to.window(handle)

alert弹出框

#切换到alert弹出框,输入文本
driver.switch_to.alert.send_keys(‘text’)
#获取alert翻出框的文本信息
driver.switch_to.alert.text
#获取确定按钮
driver.switch_to.alert.accept()
#获取取消按钮
driver.switch_to.alert.dismiss()
#截图保存,注意alert弹窗是没法截图的
driver.get_screenshot_as_file(“c:/ven/test.jpg”)

iframe的相关操作

#第一种方式:有ID和name的属性值
driver.switch_to.frame(‘id/name’) #如果id是动态变化的不能直接这样用
#第二种用法;先定义到这个iframe所在的控件属性,在执行切换到这个iframe
fm = driver.find_element_by_xpath(‘xpath’)
driver.switch_to.frame(fm)
#切换到这个iframe后就可以操作这个控件了
driver.find_element_by_xpath(‘x’).send_keys(‘name’)
#第三种方法:通过定位元素的tagname来找到所有iframe列表,再切换到自己想要的那个iframe
fm = driver.find_element_by_tag_name(‘iframe’)
driver.switch_to.frame(fm[1])
#从子iframe切换到父frame
driver.switch_to.parent_frame()
#切换到主文档
driver.switch_to.default_content()

#时间框的处理:定位到这个控件以后,清空,重新输入值
driver.find_element_by_name(‘name’).send_keys(‘2020-02-24’)
#有的输入框带readonly属性,先调用js来去掉readonly的属性
#调用js找到页面元素删除页面元素的相关属性

el = driver.find_element_by_name(‘name’)
js = “document.getElementByTagId(‘id’)[0].removeAttribute(‘readonly’)” #有ID的控件
js = “document.getElementsByName(‘name’)[0].removeAttribute(‘readonly’)” #有name的控件,定位元素一定要用复数
js = “document.getElementsByTagName(‘input’)[0].removeAttribute(‘readonly’)” #通过定位控件的标签来定位元素
#每种方法读取js

el.execute_script(js)
el.send_keys(‘aaaa’)

验证码的处理思路:通过接口请求拿到对应的验证码信息、让开发给万能码、

注入cookies
#如何注入cookie
import json
driver.get(‘www.xxxx.com’)
#设置一个比较长的等待时间,在登录页手工去输入账号、密码和验证码
time.sleep(60)
#手工登录成功后获取cookie的信息,并保存起来
cookies = driver.get_cookies()
cookies_json = json.dumps(cookies)
with open(‘cookiesFile.json’,‘w’) as f:
f.write(cookies_json)
#读取cookies存储的json文件,再逐个添加到cookie中,达到像我们平时不用登录打开网页就保持了登录效果一样的效果。
with open(‘cookiesFile.json’,‘r’) as f:
cookieInfor = json.loads(f.read())
#遍历cookie列表,添加cookie
for cookie in cookieInfor:
driver.add_cookie(cookie)
#页面刷新
driver.refresh()

文件处理

#如果是input标签,type是file类型,则直接可以通过send_keys来发送路径上传
driver.find_element_by_name(‘file’).send_keys(‘D:/test.png’)
#非input标签autolt去上传文件
#下载autolt软件,打开以后拖动光标到浏览路径的位置,可以看到相关信息
#打开autoscript编辑器,写脚本,保存文件,在保存为exe文件
import os
driver.find_element_by_name(‘updata’).click()#点击上传文件
time.sleep(5)
os.system(“D:\selenium\test.exe”)#调用system方法

如何移动滚动条

#已送到页面的底部,设置一个非常大的值去移动滚动条
js = “var q = document.documentElement.scrollTop = 10000”
driver.execute_script(js)
#相对当前坐标移动到坐标
driver.execute_script(“window.scrollBy(0,500)”)
#以当前位置为基点,偏移到相关的位置
driver.execute_script(“window.scrollBy(0,document.body.scrollHeight*0.5)”)
#移动到绝对坐标
driver.execute_script(“window.scrollTo(0,1500)”)

#自动化
‘’’
先拿到手工测试用例,来标注那个用例需要用到自动化
‘’’

你可能感兴趣的:(UI自动化测试)