首页 > 其他分享 >selenium复习之---原理+基础用法

selenium复习之---原理+基础用法

时间:2024-08-05 23:06:15浏览次数:9  
标签:webdriver 复习 selenium element --- import find browser

简介

1.是什么

selenium是用来进行页面元素定位的第三方库,用来进行web自动化测试的工具,可以直接运行在浏览器中。

2.原理:

selenium在工作过程中有三个角色,selenium客户端、webdriver和浏览器
selenium客户端是开发者与selenium的交互接口,它会发送指令给webdriver
浏览器则接收来自webdriver的执行命令,完成相应的操作

元素定位

  • 通过xpath定位driver.find_element(By.XPATH, '元素路径')
    1、绝对路径(不建议)
    2、相对路径:从一个符合条件的元素开始,以//开头,后边必须跟标签名称或表示所有标签)
# 相对路径+索引
//from/span[1]
# 相对路径+属性定位: //标签名[@属性名1 = '属性值']
//input[@autocomplete = 'off']
# 相对路径+文本定位: //标签名[text() = 'x']
//span[text() = '按图片搜索']
  • 通过CSS定位driver.find_element(By.CSS_SELECTOR, '')
# 1.使用#表示id属性
driver.find_element(By.CSS_SELECTOR, "#user")
# 2.使用.表示class属性driver.find_element(By.CSS_SELECTOR, '.tel')
# 3.通过属性定位
[attribute = value]
# 4.通过部分属性值定位
# 通过attribute属性值从value开始的元素
[attribute^ = value]
# 查找attribute属性值中含有value的元素
[attribute* = value]
# 查找attribute属性值以value结尾的元素
[attribute$ = value]
# 5.组合选择器
##1、后代选择器:空格
# 表示div标签内所有的后代元素,子,孙,重孙等
div span
## 2、子代选择器:>
# 表示div内的子集span元素(只包含子类)
div>span
## 3、兄弟选择器:~
# 表示与第一个div是兄弟的,并且是第一个div之后的元素
div~div
## 4、子元素a:nth-child(1)
# 选择第n个<a>里的元素
a:nth-chhild(1)
  • 通过ID定位(ID属性)
    driver.find_element(By.ID, "value")
  • 通过class-name定位(class属性)
    driver.find_element(By.CLASS_NAME, "value")
  • 通过tag-name定位(tag_name)
    driver.find_element(By.TAG_NAME, "input")
  • 通过link_text定位(超链接)
    driver.find_element(By.LINK_TEXT, "登录")
  • 通过partial_link定位(超链接)
    driver.find_element(By.PARTIAL_LINK_TEXT, "value")

浏览器操作

1.初始化浏览器对象
from selenium.webdriver import Chrome
# 创建一个浏览器对象,并且打开空页面
browser = Chrome()
2.访问指定网页
from selenium import webdriver
# 初始化浏览器为chrome浏览器
browser = webdriver.Chrome()
# 访问百度首页
browser.get(url)
3.设置浏览器大小
from selenium import webdriver
import time
browser = webdriver.Chrome()
browser.get(url)
# 设置浏览器为全屏
browser.maximize_window()
time.sleep(2)
# 设置分辨率为500*500
browser.set_window_size(500, 500)
# 关闭浏览器
browser.close()
4.刷新页面
from selenium import webdriver

browser = webdriver.Chrome()
browser.maximize_window()
browser.get(url)

# 刷新页面
try:
  browser.refresh()
except Exception as e:
  print("刷新失败")
5.获取页面基本属性
# 网页标题
print(browser.title)
# 获取当前网页网址
print(browser.current.url)
# 获取浏览器的名称
print(browser.name)
# 获取浏览器的网页源码
print(browser.page_sourse)
6.浏览器页面前进和后退
browser = webdriver.Chrome()
browser.maximize_window()
browser.get("https://www.baidu.com")
time.sleep(2)

browser.get("https://www.taobao.com")
time.sleep(2)

# 后退到百度页面
browser.back()
time.sleep(5)
# 前进到淘宝页面
browser.forward()
time.sleep(5)

等待操作

  • 隐式等待
# 设置隐式等待
driver.implicitly_wait(15)
  • 显示等待
# 动态的等待某个事件。
# 比如:某元素可以被定位到,某元素可以看到
# 实例化等待对象
# 设置等待时间loc
loc = (By.ID, "search-input")
# 按照设定的事件,不断地去定位元素
# 判断元素是否已加载
ele = WebDriverWait(driver, 10).until(EC.presence_of_element_located(loc))
# 判断元素是否可见
WebDriverWait(driver, 10).until(EC.visibility_of_element_located(loc))
  • 固定等待
sleep()

页面交互操作

1. 浏览器窗口切换操作

获取当前窗口的句柄:current_window_handle
返回当前浏览器的所有窗口句柄:window_handles
用于切换到对应的窗口:switch_to_windows()

from selenium import driver
import time


browser = webdriver.Chrome()
browser.maximize_window()
browser.get("http://www.baidu.com")
# 新建一个选项卡
browser.execute_script('window.open()')
print(browser.current_window_handle)
print(browser.window.handles)
# 跳转到第二个选项卡
borwser.switch_to_window(browser.window_handles[1])
browser.get("http://www.zhihu.com")
time.sleep(5)
# 回到第一个选项卡并打开淘宝
browser.switch_to_window(browser.window_handle[0])
browser.get("http://taobao.com")
2. html嵌套iframe操作
# 切入iframe
# 使用ID切换
driver.switch_to_frame("idframe2")
# 使用name切换
driver.switch_to_name("myframe2")
# 使用index切换,从0开始
driver.switch_to_frame(1)
3. 下拉框选项处理

涉及到select模块

from selenium import webdriver
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.by import By
import time

url = ""
browser = webdriver.Chrome()
browser.maximize_window()
browser.get(url)

# 获取到对应的标签
select_tag = browser.find_element(By.NAME, "帅哥")
# 根据索引值进行选择
Select(select_tag).select_by_index("2")
# 根据value进行选择
Select(select_tag).select_by_value("草儿")
# 根据文本值进行选择
Select(select_tag).select_by_visible_text("才哥")
time.sleep(5)

鼠标操作

from selenium.webdriver.common.action_chains import ActionChains


# 点击操作
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
from selenium.webdriver.common.by import By
import time

browser = webdriver.Chrome()
browser.get(r'https://www.baidu.com')
time.sleep(2)

# 定位到要右击的元素,这里选的新闻链接
click_tag = browser.find_element(By.LINK_TEXT, '新闻')
click_tag.click()
# ActionChains(browser):调用ActionChains()类,并将浏览器驱动browser作为参数
# context_click(right_click):模拟鼠标双击,需要传入指定元素定位作为参数
# perform(): 执行ActionChains()中存储的所有操作,可以看作是执行之前的一系列操作
# 双击
# 定位到要双击的元素
double_click = browser.find_element(By.CSS_SELECTOR, '.accessibility-icon')
ActionChains(browser).double_click(double_click).perfrom()
# 右击
right_click = browser.find_element(By.CSS_SELECTOR, '.accessibility-icon')
ActionChains(browser).context_click(right_click).preform()
# 拖拽
# 开始位置
source = browser.find_element(By.CSS_SELECTOR, "#draggable")
# 结束位置
target = browser.find_element(By.CSS_SELECTOR, "#droppable")
# 执行拖拽
ActionChains(browser).drag_and_drop(source, target).perform()
# 悬停
# 定位悬停的位置
move = browser.find_element(By.ID, "s-usersetting-top")
# 执行悬停操作
ActionChains(browser).move_to_element(move).preform()

按键操作

from selenium.webdriver.common.keys import Keys
# 通过send_keys()方法来模拟键盘上的按键。

JS操作

验证码处理

unittest操作

unittest 框架是python自带的一个单元测试框架,可以进行自动化测试
unittest + selenium => webui 自动化测试
unittest + requests => 接口自动化测试
unittest + appnium = 移动应用自动化测试

1、unittest 核心要素
2、实际应用
  • 定义测试用例
  • testsuit和testrunner

    实例化测试套件:suit01 = unittest.TestSuite()
    加入测试方法:suit01.addTest(TestAdd001("test_01"))
    实例化runner对象:run01 = unittest.TextTestRunner()
    运行:run01.run(suit01)

  • TestLoader

    实例化runner
    运行测试用例

  • Fixture
方法级的
class Test(unittest.TestCase)
  def setUp(self):
    print("...")

  def tearDown(self):
    print("...")
类级的
class Test(unittest.TestCase):
  @classmethod
  def setUpClass(cls)->None:
    print("...")
  def tearDownClass(cls)->None:
    print("...")
模块级别的
  • 用例的跳过
# 在方法前使用跳过,跳过该测试用例
@unittest.skipIf(条件, "message")
# 或者
@unittest.skip("message")
def test(self):
  ...
  ...

标签:webdriver,复习,selenium,element,---,import,find,browser
From: https://www.cnblogs.com/piaoduo-yf/p/18340266

相关文章

  • Studying-代码随想录训练营day59| dijkstra(堆优化版)精讲、Bellman_ford 算法精讲
    第59天,dijkstra算法的优化版本,以及Bellman_ford算法......
  • 【C基础-按要求找数】一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方
    一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少完全平方数是指一个整数能够表示为某个整数的平方。换句话说,如果存在一个整数 n,使得 n^2=m,那么 m 就是一个完全平方数。使用C语言实现,具体代码:#include<stdio.h>#include<math.h>int......
  • L1-048 矩阵A乘以B 分数 15
    //10'42"#include<iostream>usingnamespacestd;constintN=110;intarr[N][N];intbrr[N][N];intcrr[N][N];intmain(){intx1,y1;cin>>x1>>y1;for(inti=1;i<=x1;++i)for(intj=1;j......
  • COUNTING-SORT(计数排序) and
    计数排序             计数排序假设n个输入元素(适用于小范围区间)中的每一个都是在0到k区间内的一个整数,其中k为某个整数。当k=O(n)时,排序的运行时间为.    计数排序的基本思想:对每一个输入的元素x,确定小于x的元素个数。利用这一信息,就可以直接把x......
  • 仓颉编程语言入门 -- Array数组详解
    仓颉编程语言入门–Array数组详解一.如何创建Array数组我们可以使用Array类型来构造单一元素类型,有序序列的数据。1.仓颉使用Array来表示Array类型。T表示Array的元素类型,T可以是任意类型,类似于泛型的概念vararr:Array<String>=["你好","仓颉"]va......
  • 爬虫:xpath高级使用,bs4使用,bs4-css选择器
    xpath高级使用fromlxmlimportetree#由于本次要格式化的内容是一个文件,所以用parse,如果是一个html格式的字符串就用HTMLhtml=etree.parse('02_xpath.html')#可以连接多个但是每两个之间要用一个管道符来连接#print(html.xpath('//ol/li[@data="one"]/text()|......
  • makefile--
    MakeFile中经常需要得到系统和编译器的版本root-config:ROOTutilityforyourMakefiles[phil@linux952~]$root-config--cxxicpx[phil@linux952~]$root-config-hUnknownargument"-h"!Usage:root-config[--prefix[=DIR]][--exec-prefix[=DIR]][--version][--c......
  • 数据库复习
    绪论1、数据库(DB):长期存储在计算机内、有组织、可共享的大量数据的集合。数据库中的数据按照一定的数据模型组织、描述和存储,具有娇小的冗余度、交稿的数据独立性和易扩展性,并可为各种用户共享。2、数据库管理系统(DBMS):位于用户和操作系统间的数据管理系统的一层数据管理软件......
  • [COCI2015-2016#3] NEKAMELEONI 题解
    前言题目链接:LOJ;洛谷。题意简述在二叉树上,不断删除叶子,你要维护其树链剖分后重儿子编号和。如果两个孩子大小相同,在一开始连向左儿子,或者保持修改前的连接。\(n\leq2\times10^5\)。题目分析有分块的、有二分的,那我来讲一讲我的想法——树剖维护树剖。首先反转操作,不断......
  • 2024 睿抗机器人开发者大赛CAIP-编程技能赛-本科组(国赛)
    2024睿抗机器人开发者大赛CAIP-编程技能赛-本科组(国赛)前言补题只补了前四道,第五题打个暴力都有\(24\)分,我这死活只有\(22\)分\(QAQ\)RC-u1大家一起查作弊思路按题意模拟。不过很奇怪赛时用getline老是读入不了,还好换成cin直接读也问题不大。代码#include<bits......