首页 > 编程语言 >python+selenium自动化测试

python+selenium自动化测试

时间:2023-09-03 11:22:54浏览次数:29  
标签:定位 webdriver python 自动化 selenium element time browser

自动化测试工具selenium使用指南

python+selenium环境安装:

直接pip install selenium

 安装webdriver

打开/关闭浏览器:

import time
from selenium import webdriver

browser = webdriver.Edge()
browser.get("http://www.baidu.com/")
time.sleep(5)
browser.get("https://mail.163.com/")
browser.quit()

使用implicitly_wait设置最长等待时间

import time

from selenium import webdriver

browser = webdriver.Edge()
browser.implicitly_wait(10)
browser.get("http://www.baidu.com/")
time.sleep(5)
browser.quit()

 

 

 

元素定位:

  • find_element()系列:用于定位单个的页面元素。
  • find_elements()系列:用于定位一组页面元素,获取到的是一组列表。

可以通过id属性定位:

  • find_element(By.ID,'XX')id定位,根据元素的id属性值定位,最为方便且唯一,但有可能不存在,也可能动态生成。
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()
browser.implicitly_wait(10)
browser.get("http://www.baidu.com/")
time.sleep(5)
# 定位搜索框
input_text = browser.find_element(By.ID, 'kw')
# 在搜索框中输入内容
input_text.send_keys('selenium')
time.sleep(5)
browser.quit()

可以通过name属性定位:

  • find_element(By.NAME,'xx')name定位,根据元素的name属性值定位,定位到的标签不一定是唯一的。

可以通过class属性定位:

  • find_element_by(By.CLASS_NAME,'xx')class定位,根据元素的class属性值定位,但可能受JS影响动态变化。定位到的标签不一定是唯一的。

可以通过tag标签定位:

  • find_element(By.TAG_NAME,'xx')tag name定位,根据元素的标签名定位,定位到的标签不一定是唯一的。

可以通过link定位:

  • link表示包含有属性href的标签元素,如:<a href="https://www.csdn.net">linktext</a>可以通过LINK_TEXT进行定位。
  • find_element(By.LINK_TEXT,'XX')根据链接文本全匹配进行精确定位。
  • find_element(By.PARTIAL_LINK_TEXT,'XX')根据链接文本模糊匹配进行定位。

可以通过xpath定位:

xpath是一种在XML文档中定位元素的语言

可以通过css选择器定位:

  • find_element(By.CSS_SELECTOR,'XX')根据元素的css选择器来完成定位,可以准确定位任何元素,但需要熟练掌握css选择器
  • css选择器

几种方式定位的区别:

定位方式 定位是否唯一 返回值类型 备注
id属性定位 唯一 element

只有标签有id属性时才能使用

name属性定位 可能不唯一

element或elements列表

只有标签有name属性时才能使用

class属性定位 可能不唯一 element或elements列表 只有标签有class属性时才能使用
tag定位 可能不唯一 element或elements列表 通常得到的都是一组列表
link_text精确定位 可能不唯一 element或elements列表 只有存在link_text相同时, 才得到列表
link_text模糊定位 可能不唯一 element或elements列表 一般用于定位<a></a>标签
xpath定位 可能不唯一 element或elements列表 一般用来做精准定位,用/表示元素层级关系,xpath属性定位值必须加引号
css选择器定位 可能不唯一 element或elements列表

一般用作精确定位,用>或空格表示元素层级关系,属性值可以不加引号

 

 

 

 

 

 

 

 

 

 

 

文本输入、清除与提交

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()
browser.implicitly_wait(10)
browser.get("http://www.baidu.com/")
time.sleep(5)
# 定位搜索框
input_text = browser.find_element(By.ID, 'kw')
# 通过Xpath定位搜索框并输入内容查询
browser.find_element(By.XPATH, '//*[@id="kw"]').send_keys('selenium')
input_text.submit()
time.sleep(3)
browser.quit()

获取页面内容

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()
browser.implicitly_wait(10)
browser.get("http://www.baidu.com/")
time.sleep(5)
title = browser.title
print(title)
source_code = browser.page_source
print(source_code)
url = browser.current_url
print(url)
text = browser.find_element(By.XPATH, '//*[@id="s-top-left"]').text
print(text)
time.sleep(3)
browser.quit()

调整浏览器尺寸大小

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()
browser.implicitly_wait(10)
browser.get("http://www.baidu.com/")
time.sleep(5)
browser.minimize_window()
time.sleep(2)
browser.maximize_window()
time.sleep(3)
browser.quit()

前进一页,后退一页

.forward()

.back()

页面刷新

.refresh()

窗口切换

current_window_handle获取当前窗口的句柄
window_handles获取所有打开页面的句柄,是一个列表
switch_to.window(“XX”)切换到指定页面,XX代表页面句柄
switch_to.frame(XX)切换到内敛框架页面,XX代表内联框架标签的定位对象
swith_to.parent_frame()切回到内敛框架的上一级,即从内敛框架切出
switch_to.alert切换到页面弹窗

下拉列表操作

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

browser = webdriver.Chrome()
browser.implicitly_wait(10)
browser.get("file:///D:/3-项目/Projects/Practise/For_test/learning_selenium.html")
time.sleep(5)
select = Select(browser.find_element(By.TAG_NAME, 'select'))
select.select_by_value("Python")
time.sleep(2)
select.select_by_visible_text("C++")
time.sleep(2)
select.select_by_index(0)
time.sleep(2)
for i in select.options:
    i.click()
    time.sleep(2)

time.sleep(3)
browser.quit()

弹窗操作

switch_to.alert获取弹窗对象。
text弹窗内容
accept()接受弹窗
dismiss()取消弹窗

鼠标操作

鼠标操作需要的类:ActionChain

move_to_element(X)鼠标悬停,X代表定位到的标签

double_click(X)双击

context_click(X)右击

perform() 执行所有存储在ActionChains()类中的行为,做最终的提交

不管执行哪个方法,最后都要调用perform()方法,将操作呈现出来。

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.select import Select
browser = webdriver.Chrome()
browser.implicitly_wait(10)
browser.get('https://www.baidu.com/')
browser.maximize_window()
time.sleep(3)
# 创建对象
action = ActionChains(browser)
action.move_by_offset(10, 50).perform()
time.sleep(2)

# 定位标签,移动鼠标
tag = browser.find_element(By.XPATH, '//*[@id="kw"]')
action.move_to_element(tag).perform()
time.sleep(2)

tag.send_keys('python')
tag2 = browser.find_element(By.XPATH, '//*[@id="su"]')
action.move_to_element(tag2).click().perform()

time.sleep(3)
browser.quit()

键盘操作

send_keys(Keys.BACK_SPACE)执行删除键Backspace
send_keys(Keys.CONTROL,'a')全选
send_keys(Keys.CONTROL,'x')剪切
send_keys(Keys.CONTROL,'c')复制
send_keys(Keys.CONTROL,'v')粘贴
send_keys(Keys.SPACE): 空格键(Space)
send_keys(Keys.TAB): 制表键(Tab)
send_keys(Keys.ESCAPE): 回退键(Esc)
send_keys(Keys.ENTER): 回车键(Enter)
send_keys(Keys.F1): 键盘 F1

 

标签:定位,webdriver,python,自动化,selenium,element,time,browser
From: https://www.cnblogs.com/wangzhilong/p/17672020.html

相关文章

  • python学习
    python学习正则表达式的使用正则表达式以下是替换指定文件夹下文本中的内容对图片形式的pdf提取目录,可以用以下程序叠加多个正则表达式来去除重复项。importosimportredefreplace_timestamp(directory):#遍历目录下的所有文件和文件夹forroot,dirs,fil......
  • 【Python】90%开发者未注意到的Python特性
    1.引言如果你在日常工作中经常使用Python进行编码,那么毫无疑问你会非常喜欢这个简单的Python功能。闲话少说,我们直接开始吧!2.举个栗子例如,要求大家打印列表中元素的值。我想大部分人可以立即使用for循环来执行此操作。li=[10,20,30,40,50]foriinli:print(i)结......
  • 浅析常用的Python Web的几大框架
    在各种语言平台中,python涌现的web框架恐怕是最多的,是一个百花齐放的世界,各种micro-framework、framework不可胜数;猜想原因应该是在python中构造框架十分简单,使得轮子不断被发明。所 以在Python社区总有关于Python框架孰优孰劣的话题。下面就给大家介绍一下python的几大框架: Djan......
  • Python练习:嵌套列表解析,讲3*4的矩阵转换成4*3的矩阵
      1#嵌套列表解析,讲3*4的矩阵转换成4*3的矩阵23matrix=[[1,2,3,4],4[5,6,7,8],5[9,10,11,12]]678forrowinmatrix:9print("遍历每一行:",row)101112print("\n")1314s=[[row[i]forrow......
  • python: excel 换行符(_x000D_)
     data4=dataframe1.loc[4:34]foridx,datavalueindata4.iterrows():#strnum=Common.Utils.Utils.getAnnualLeave(data)print("[{}]:{}".format(idx,datavalue))slist=datavalue.tolist()hbll=BLL.EmpLoyeeHo......
  • 实现python自动化进行薪资核算——关于pip和pandas库的版本问题
    实现python自动化薪资核算的问题并不难,我们需要一个含有员工职位、姓名、基本工资、奖金、扣款等基本信息的xlsx表,然后通过编写一个含有读取信息函数,薪资计算函数、输出薪资函数的python程序,即可解放双手,实现沉浸式核算薪资。 那么在进行正式编写程序之前,我们需要先认识下一个库—......
  • centos stream 9 编译 python3.11.5 源代码
    wgethttps://www.python.org/ftp/python/3.11.5/Python-3.11.5.tgztar-zxvfPython-3.11.5.tgzcdPython-3.11.5执行配置帮助./configure--help主要是想设置安装路径Installationdirectories:--prefix=PREFIXinstallarchitecture-independentfilesinP......
  • # yyds干货盘点 # 分享一个Python字符串替换的基础题目(中篇)
    大家好,我是皮皮。一、前言上一篇文章,【瑜亮老师】引申了下字符串处理的题目,如下所示:扩展一下,下面的结果是什么:strs='abbacabbc'print(strs.strip('ab'))二、实现过程这里【王子】还是有点东西的,全部都回答正确了。那么再扩展下呢?你能够回答的出来吗?下一篇文章,我们揭晓答案。三、......
  • python字典、列表的综合应用(后宫选妃、个人ip、学籍管理系统)
    #后宫选妃+个人IP系统+学籍管理系统)代码#学籍管理系统print("====后宫选妃+个人IP系统+学籍管理三合一系统====")print("1.后宫选妃系统=")print("2.个人IP系统=")print("3.学籍管理系统......
  • Lnton 羚通算法算力云平台如何在 OpenCV-Python 中使用 cvui 库创建图像
    CVUI之图像Pythonimportnumpyasnpimportcv2importcvuidefimage_test():WINDOW_NAME='Image-Test'#创建画布frame=np.zeros((400,600,3),np.uint8)#读取图像image=cv2.imread("lena-face.jpg",cv2.IMREAD_COLOR)......