Python+selenium web测试入门基础
入门
自动化测试框架
from selenium import webdriver
获取浏览器对象
我这里是edge浏览器,用的是edge的webdriver
-
# webdriver获取浏览器对象 -
driver = webdriver.Edge()
尝试打开网站并关闭
-
# 准备一个网址 -
url = "https://www.baidu.com/" -
driver.get(url) -
# 资源回收 -
driver.quit()
元素定位
定位普通元素
元素可通过 ID,NAME,CLASS_NAME查找(tagname不常用)
-
driver.find_element(By.ID,"kw").send_keys("python") -
driver.find_element(By.NAME,"wd").send_keys("python") -
driver.find_element(By.CLASS_NAME,"s_ipt").send_keys("python") -
# 点击(click)id为su的控件 -
driver.find_element(By.ID,"su").click()
.send_keys() 表示往元素中填入内容。
.click() 表示点击元素
也可以通过css选择器,前缀为’#’ 代表ID值, ‘.’ 代表class值,[ ]可直接输入内容定位元素
-
By.CSS_SELECTOR,'.s_ipt').send_keys('python') -
driver.find_element(By.CSS_SELECTOR,'[name=wd]').send_keys('python') -
driver.find_element(By.CSS_SELECTOR,'[value=百度一下]').click() -
xpath定位法,通过决定路径或属性查找的方式来定位元素。 -
//* 代表全局查找符合条件的元素 -
[@xx=”xxx” ] 代表查找属性xx等于xxx的元素,不带@就不是属性,一般用于搜索文本 -
driver.find_element(By.XPATH,"//*[@id='kw']").send_keys('python') -
driver.find_element(By.XPATH,'//*[@id="su"]').click()
定位a标签(链接标签)
可通过linktext、partial linktext定位
driver.find_element(By.LINK_TEXT,'hao123').click()
driver.find_element(By.PARTIAL_LINK_TEXT,'hao').click()
获取元素属性
-
# 获取元素大小 -
print(driver.find_element(By.ID, 'kw').size) -
# 获取元素文本 -
print(driver.find_element(By.ID, 'kw').text) -
# 获取文本属性 -
print(driver.find_element(By.XPATH, '//*[@id="s-top-left"]/a[1]').get_attribute('href')) -
# 元素是否可见 -
print(driver.find_element(By.ID, 'kw').is_displayed()) -
# 元素是否可用 -
print(driver.find_element(By.ID, 'kw').is_enabled())
获取网页属性
-
# 获取页面title -
print(driver.title) -
# 获取网页url -
print(driver.current_url) -
# 浏览器后退 -
driver.back() -
# 浏览器前进 -
driver.forward() -
# 浏览器刷新 -
driver.refresh() -
# 关闭当前页面 -
driver.close()
元素等待
该操作主要是防止界面跳转后,新界面还未完全加载就进行操作步骤,从而导致代码找不到相应的元素而报错。
强制等待
通过time库,让程序强制停止一段时间,单位为秒。
-
# 强制等待 -
import time -
time.sleep(1)
该方法比较死板,比较浪费时间,实际使用不太推荐,可在编写代码时用该方法查看代码运行效果。
显示等待
等待某个元素加载完成后继续运行代码,每0.5秒检测一次,如果出现该元素就运行代码,如果一直未出现(直到到达指定的时间),就会返回TimeOutException的错误。
-
from selenium.webdriver.support.wait import WebDriverWait -
from selenium.webdriver.support import expected_conditions as EC -
WebDriverWait(driver,5).until(EC.presence_of_element_located((By.ID,'1')))
优点:比较节省时间,在需要的元素出现时可直接开始运行代码,不必等待网页的全部加载。
缺点:导入的库太多
隐式等待
driver.implicitly_wait(5)
优点:不需要设定多个参数,也不需要导入库,在元素加载完毕后能够直接运行代码。
缺点:因为没有明确等待的元素,所以隐式等待需要等待所有元素加载完毕在运行代码,在弱网状态时建议使用显示等待,让需要使用的元素出现时及时运行代码,节约时间。
鼠标操作
-
# 导入鼠标操作 库包 -
from selenium.webdriver.common.action_chains import ActionChains -
# 鼠标右击 -
action.context_click(driver.find_element(By.ID,'kw')) -
# 鼠标悬停 -
action.move_to_element(driver.find_element(By.CLASS_NAME,'soutu-btn')) -
# 鼠标拖拽 第一个是拖拽目标,第二个是到达地址 -
action.drag_and_drop(driver.find_element(xxx),driver.find_element(xxx)) -
# 执行代码 -
action.perform()
键盘操作
-
el = driver.find_element(By.ID,'kw') -
# 输入内容 -
el.send_keys("python") -
# 全选 -
el.send_keys(Keys.CONTROL,'a') -
# 删除 -
el.send_keys(Keys.BACK_SPACE) -
# 复制 -
el.send_keys(Keys.CONTROL,'c') -
# 粘贴 -
el.send_keys(Keys.CONTROL,'v')
下拉框的选择
该功能用于下拉框的选择,用于网页的’<select>’模块选择。

-
# 下拉框的库 -
from selenium.webdriver.support.select import Select -
select = Select(driver.find_element(By.CSS_SELECTOR,'[name=city]')) -
# 通过index选择 -
select.select_by_index(0) -
time.sleep(2) -
# 通过value选择 -
select.select_by_value('sh') -
time.sleep(2) -
# 通过文字选择 -
select.select_by_visible_text('成都')
滚动条
Python不能直接调用滚动条,但是可以使用js语言来调用。
-
# 通过js语言进行滑动 -
# 隐式等待无法滚动,滚动前不能添加隐式等待 -
time.sleep(2) -
js_str = "window.scrollTo(0,10000)" -
driver.execute_script(js_str)
警告框的处理
该功能主要用于处理网页的报错警告框,例如网站的必读信息、登录过期等消息。
-
# 警告框需要切换到警告框再处理 -
alert = driver.switch_to.alert -
# 打印警告框内容 -
print(alert.text) -
# 取消警告框 -
alert.dismiss() -
# 确定警告框 -
alert.accept()
frame的切换
该功能用于在某些网页中,网页内会内嵌一个网页,此时需要从原本的网页切换到内嵌的网页中,才能对内嵌的网页进行操作。
![]()
driver.switch_to.frame(“frame元素的位置”)
标签页的切换
页面标签我们叫做habdle,其中可以通过两种方式获得页面的标签。
![]()
-
# 获取页面 获取当前handle,新打开的页面在所有handle列表的最后面 -
# 获取浏览器所有页面标签的list -
print(driver.window_handles) -
# 打印当前的页面标签 -
print(driver.current_window_handle)
每个新产生的页面标签都会排到list的后面,无论在浏览器上面怎么显示,新的页面标签就像用list.append()一样加入标签列表中。
driver.switch_to.window(driver.window_handles[1])
截图
全屏截图并直接保存:
driver.get_screenshot_as_file("截图.png")
截图后按照png格式保存为Python的变量:
shotpng = driver.get_screenshot_as_png()
感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取

更多推荐
所有评论(0)