python+selenium自动化测试

自动化测试工具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

 

posted on 2023-09-03 11:06  Hanson_Wang  阅读(112)  评论(0编辑  收藏  举报