自动化测试selenium+python(webdriver常用的API)

观察脚本

#coding = utf-8

from selenium import webdriver
import time

browser = webdriver.Firefox()
browser.get("https://www.baidu.com")
browser.find_element_by_id("kw").send_keys("selenium")
browser.find_element_by_id("su").click()
time.sleep(3)
browser.quit()

上述脚本解析:

1.from selenium import webdriver
  要想使用selenium的webdriver里面的函数,首先要导入包
2.browser = webdriver.Firefox()
  用webdriver操纵Firefox浏览器,也可以操纵其他浏览器,browser是一个变量,可以随便取
3.browser.find_element_by_id(“kw”).send_keys(“selenium”)
  一个控件会有若干属性,比如id,name等,使用一个属性进行定位
4.browser.find_element_by_id(“su”).click()
  搜索按钮的id叫su,输入框输入内容之后点击搜索按钮
5.browser.quit()
  退出并关闭窗口的每一个相关的驱动程序
6.browser.close()
  关闭当前窗口

close和quit的区别:
  close方法关闭当前的浏览器窗口,而quit方法不仅关闭窗口,还会彻底的退出webdriver,释放与webdriver之间的连接。



元素的定位

  在自动化测试中,识别对象是非常重要的,只有定位到对象,才可以操纵对象。浏览器中的对象也会有各自的属性的,就和人有身份证号,门牌号等一样。所以,通过属性就可以定位到这个对象。
注意:不管用什么方式定位,必须要保证该页面上的该属性的唯一性


webdriver提供了一系列的对象定位方法,常用的有以下几种:

id
name
class name
link text
partial link text
tag name
xpath
css selector

例如一个百度搜索框可以用这些方式定位(在搜索框中右击,然后选择检查元素,就可以看到控件属性,其他控件也可以这样查看)

图1:
在这里插入图片描述


一.id和name定位

  id和name是最常用的定位方式,因为大多数控件都有这两个属性,而且在对控件的id和name命名时一般使其有意义也会取不同的名字。
在这里插入图片描述
通过id和name定位:

browser.find_element_by_id("kw").send_keys("搜索内容")
browser.find_element_by_name("wd").send_keys("搜索内容")


二.tag name和class name定位

1.tag name
  如图1,input就是一个标签的名字,可以通过tag name来定位,不过要保证tag name的唯一性

browser.find_element_by_tag_name("input").send_keys("搜索内容")


2.class name
  

browser.find_element_by_class_name("s_ipt").send_keys("搜索内容")


三.CSS定位

  CSS是一种语言,用来描述HTML和XML文档的表现。
  CSS使用选择器来为页面元素进行绑定属性,这些选择器可以被selenium用作另外的定位策略

如何定位到CSS选择器? 先定位到对象-右击-复制
在这里插入图片描述

browser.find_element_by_css_selector("#kw").send_keys("内容")


四.XPath定位

定位方式如上:
在这里插入图片描述

browser.find_element_by_xpath('//*[@id="kw"]').send_keys("内容")



五.link text和Partial link text定位

  通过这样的方式可以定位到文字链接

#链接的全称
browser.find_element_by_link_text("hao123").click()

#链接的一部分文字进行匹配
browser.find_element_by_partial_link_text("hao").click()




定位一组元素

webdriver可以很方便的使用findElement方法来定位某个特定的对象,不过有时候需要定位一组对象,这时候就要用到findElements方法

定位一组元素应用场景:
1.批量操作对象
2.先获取一组对象,然后在这组对象中再过滤某特定对象

如这样一个界面:有三个复选框和两个单选框。
在这里插入图片描述
定位上图中的三个复选框:

from selenium import webdriver
import time
import os

browser = webdriver.Firefox()
file_path = 'file:///'+os.path.abspath('check.html')
browser.get(file_path)

inputs = browser.find_elements_by_tag_name("input")
for input in inputs:
            #get_attribute:获取属性值
    if input.get_attribute('type') == 'checkbox': 
        input.click()
time.sleep(3)
browser.quit()




操作测试对象

  上述已经将元素定位到了,定位到了之后就可以对其进行相应的操作,如点击,输入还是提交等

webdriver中比较常用的操作对象的方法:

click      点击对象
send_keys   在对象上模拟键盘输入
clear       清除对象内容
submit    表单提交
text      用于获取对象的文本信息




一.鼠标点击与键盘输入

send_keys(" ")用于在一个输入框里输入内容
click()用于点击一个按钮
clear()用于清除输入框里的内容

#coding = utf-8

from selenium import webdriver
import time

browser = webdriver.Firefox()
browser.get("https://www.baidu.com")

browser.find_element_by_id("kw").send_keys("软件测试")
time.sleep(2)
browser.find_element_by_id("kw").clear()
browser.find_element_by_id("kw").send_keys("软件开发")
time.sleep(2)
browser.find_element_by_id("su").submit()
time.sleep(3)
browser.quit()



二.表单提交submit

将点击"百度一下"的操作转换成submit可以达到相同的效果

browser.find_element_by_id("su").submit()



三.text获取元素文本

text用于获取元素文本信息

#coding = utf-8

from selenium import webdriver
import time

browser = webdriver.Firefox()
browser.get("https://www.baidu.com")

data = browser.find_element_by_xpath('//*[@id="s-bottom-layer-right"]').text
print(data)
browser.quit()

运行结果:
在这里插入图片描述



四.添加等待

添加休眠时间之前要引入time包

1.智能等待
通过添加implicitly_wait()方法就可以实现智能等待

2.强制等待
通过time.sleep()实现固定时间的等待


两者区别:
  智能等待是在一个时间范围内智能的等待,一般用来等待页面加载完成,在规定时间范围内如果页面加载完成后就执行下一步操作,强制等待就是必须要等待规定的时间之后才可以进行下一步操作


五.打印信息

打印tile以及url
from selenium import webdriver
import time

browser = webdriver.Firefox()
browser.get("https://www.baidu.com")

print(browser.title)
print(browser.current_url)
browser.quit()

运行结果
在这里插入图片描述



六.浏览器的操作

1.浏览器最大化

在浏览器调用启动的时候不是全屏的,有时候会影响“观看”,所以可以将浏览器最大化

browser.maximize_window()   #将浏览器最大化显示


2.设置浏览器的宽和高

这种方式可以随意设计浏览器的宽和高

#让浏览器以宽400,高800显示
browser.set_window_size(400,800)



七.浏览器的前进和后退

  在浏览器上有一个前进和后退按钮,对于浏览网页来说是比较方便的。

from selenium import webdriver
import time


browser = webdriver.Firefox()
#第一次访问百度页面
first_url = 'https://www.baidu.com'
browser.get(first_url)
time.sleep(3)

#访问新闻页面
second_url = 'https://news.baidu.com'
browser.get(second_url)
time.sleep(3)

#后退到百度页面
browser.back()
time.sleep(2)

#前进到新闻页面
browser.forward()
time.sleep(2)

browser.quit()



八.控制浏览器滚动条

from selenium import webdriver
import time


browser = webdriver.Firefox()
browser.get("https://www.baidu.com")

#搜索
browser.find_element_by_id("kw").send_keys("selenium")
browser.find_element_by_id("su").click()
time.sleep(3)

#将页面滚动条拖到底部
js = 'var q= document.documentElement.scrollTop=10000'
browser.execute_script(js)
time.sleep(3)

#将滚动条移动到页面顶部
js = "var q= document.documentElement.scrollTop=0"
browser.execute_script(js)
time.sleep(3)
browser.quit()





键盘事件

一.键盘按键用法

以登录禅道为例子:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time


browser = webdriver.Firefox()
browser.get("http://127.0.0.1:88/biz/user-login.html")
time.sleep(3)
browser.maximize_window()
browser.find_element_by_id("account").clear()
browser.find_element_by_id("account").send_keys("admin")
time.sleep(3)

#tab的定位相当于清除了密码框的默认信息
browser.find_element_by_id("account").send_keys(Keys.TAB)
browser.find_element_by_name("password").send_keys("xuyao1056235261")
#通过回车键代替点击操作
browser.find_element_by_name("password").send_keys(Keys.ENTER)
time.sleep(10)
browser.quit()

要调用键盘按键操作需要引入keys包
通过send_keys()调用按键
如:
  send_keys(Keys.TAB)      #TAB
  send_keys(Keys.ENTER)    #回车



二.键盘组合键用法

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time


browser = webdriver.Firefox()
browser.get("https://www.baidu.com")
browser.find_element_by_id("kw").send_keys("selenium")
time.sleep(3)

#ctrl+a全选
browser.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
time.sleep(3)

#ctrl+x剪切内容
browser.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')
time.sleep(3)

browser.find_element_by_id("kw").send_keys("python")
browser.find_element_by_id("su").click()
time.sleep(3)
browser.quit()





鼠标事件

ActionChains类

context_click()    右击
double_click()    双击
drag_and_drop()   拖动
move_to_element()  移动

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time

browser = webdriver.Firefox()
browser.get("https://news.baidu.com")

qqq = browser.find_element_by_xpath('.//*[@id="s_btn_wr"]')
#右击
ActionChains(browser).context_click(qqq).perform()
time.sleep(3)
#双击
ActionChains(browser).double_click(qqq).perform()
time.sleep(3)
browser.quit()

ActionChains(browser):生成用户的行为。所有的行动都存储在actionchains对象
perform()用来执行所有存储的行为




多层框架/窗口定位

多层框架或窗口的定位
switch_to.frame()
switch_to.window()

一.多层框架的定位

  在web应用里经常会出现框架或者窗口的应用,有时候定位一个元素,定位器没有问题,但是却一直定位不了,这个时候就要检查这个元素是否在一个frame中,switch_to.frame()是将当前定位的主体切换到了frame里。因为frame中其实相当于嵌入了另一个页面,webdriver每次只能在一个页面识别。


frame.html
在这里插入图片描述
用switch_to.frame()方法来进行定位:

from selenium import webdriver
import time
import os

browser = webdriver.Firefox()
file_path = 'file:///'+os.path.abspath('frame.html')
browser.get(file_path)
browser.implicitly_wait(30)

#先找到iframe1
browser.switch_to.frame("f1")
#再找到iframe2
browser.switch_to.frame("f2")

#正常操作元素 
browser.find_element_by_id("kw").send_keys("java")
browser.find_element_by_id("su").click()
time.sleep(4)
browser.quit()


成功定位到最内层框架:
在这里插入图片描述

二.多层窗口的定位

  有可能嵌套的不是框架而是窗口,有针对窗口的方法:switch_to.window()
用法与switch_to.frame相同

driver.switch_to.window(“窗口名”)




层级定位

如图所示:链接点开有另外的选项
在这里插入图片描述
定位思路:
  先点击显示出1个下拉菜单,然后再定位到该下拉菜单的所在的url,再定位这个url下的某个具体的link

from selenium.webdriver.support.ui import WebDriverWait
from selenium import webdriver
import time
import os

browser = webdriver.Firefox()
file_path = 'file:///'+os.path.abspath('level_locate.html')
browser.get(file_path)

#点击Link1链接(会弹出下拉列表)
browser.find_element_by_link_text("Link1").click()

#找到id为dropdown1的父元素
WebDriverWait(browser , 10).until(lambda the_driver:
                                the_driver.find_element_by_id('dropdown1').is_displayed())

#在父元件条件下找到link为Action的子元素
menu=browser.find_element_by_id('dropdown1').find_element_by_link_text('Action')

#操作鼠标,将鼠标移动到子元素上
webdriver.ActionChains(browser).move_to_element(menu).perform()
time.sleep(4)
browser.quit()



定位结果:
在这里插入图片描述


下拉框处理


如图所示:
在这里插入图片描述

定位思路: 先定位到下拉框,再定位到下拉框里的选项

from selenium import webdriver
import time
import os

browser = webdriver.Firefox()
file_path = 'file:///'+os.path.abspath('drop_down.html')
browser.get(file_path)

#先定位到下拉框
m=browser.find_element_by_id("ShippingMethod")
#再点击下拉框中的选项,下面定位到的是value=10.69
m.find_element_by_xpath("/html/body/select/option[3]").click()
time.sleep(3)
browser.quit()




定位结果:
在这里插入图片描述

alert的处理

text返回alert中的文字信息
accept点击确认按钮
dismiss点击取消按钮,如果有的话
send_keys输入值,没有对话框就不用了

在这里插入图片描述

注意:switch_to.alert只能处理原生的alert

from selenium import webdriver
import time
import os

browser = webdriver.Firefox()
file_path = 'file:///'+os.path.abspath('alert.html')
browser.get(file_path)

browser.find_element_by_id("tooltip").click()
alert = browser.switch_to.alert
time.sleep(3)
alert.accept()
time.sleep(3)
browser.quit()
#接受警告信息
alert = browser.switch_to.alert
alert.accept()


#得到文本信息打印
alert = browser.switch_to.alert
print(alert.text)

#取消对话框
alert = browser.switch_to.alert
alert.dismiss()

#输入值
alert = browser.switch_to.alert
alert.send_keys("内容")





DIV对话框的处理

  有时候弹出的不是警告框而是有更多功能的会话框

如图所示:
在这里插入图片描述
操作脚本:

from selenium import webdriver
import time
import os
import selenium.webdriver.support.ui as ui

browser = webdriver.Firefox()
file_path = 'file:///'+os.path.abspath('modal.html')
browser.get(file_path)

#打开对话框
browser.find_element_by_id("show_modal").click()
time.sleep(3)

#点击对话框中的链接
link = browser.find_element_by_id("myModal").find_element_by_id('click')
link.click()
time.sleep(3)

#关闭对话框
buttons = browser.find_element_by_class_name('modal-footer').find_elements_by_tag_name('button')
buttons[0].click()
time.sleep(2)
browser.quit()





上传文件操作

  上传过程打开了一个新窗口,从窗口选择文件进行上传
在这里插入图片描述
操作脚本:

from selenium import webdriver
import time
import os


browser = webdriver.Firefox()
file_path = 'file:///'+os.path.abspath('upload.html')
browser.get(file_path)

browser.find_element_by_name("file").send_keys("E:\\icons\\bit1.txt")
time.sleep(2)
browser.quit()



结果:成功上传
在这里插入图片描述

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Web自动化测试是指通过编写自动化脚本来模拟用户在Web应用程序上的操作,以验证应用程序的功能和性能。Selenium是一种流行的Web自动化测试工具,而Python是一种常用的编程语言。结合使用SeleniumPython,可以实现高效的Web自动化测试。 要使用Selenium进行Python的Web自动化测试,首先需要搭建相应的环境。可以按照以下步骤进行搭建: 1. 安装Python:访问Python官方网站,下载并安装Python的最新版本。 2. 安装Selenium:使用Python的包管理工具pip,在命令行中执行以下命令安装Selenium包: ``` pip install selenium ``` 3. 下载浏览器驱动:根据你所使用的浏览器类型,下载相应的浏览器驱动。例如,如果你使用Chrome浏览器,可以下载Chrome浏览器驱动。 4. 配置浏览器驱动:将下载的浏览器驱动添加到系统的环境变量中,这样Selenium才能找到并使用它。 完成环境搭建后,就可以编写自动化测试脚本了。以下是一个简单的示例脚本: ```python from selenium import webdriver # 创建WebDriver对象,启动浏览器 driver = webdriver.Chrome() # 打开网页 driver.get('https://www.baidu.com') # 查找搜索框并输入内容 input_box = driver.find_element_by_css_selector('#kw') input_box.send_keys('selenium') # 查找“百度一下”按钮并点击 submit_button = driver.find_element_by_css_selector('#su') submit_button.click() # 检查搜索结果中是否包含关键字 assert 'selenium' in driver.title # 关闭浏览器 driver.quit() ``` 以上脚本使用SeleniumAPI来模拟用户在百度搜索引擎上的操作,并检查搜索结果中是否包含关键字"selenium"。可以根据实际需求编写更复杂的自动化测试脚本。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Web自动化测试环境搭建之Python+Selenium](https://download.csdn.net/download/weixin_38690402/15443144)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Web自动化测试 —— 测试环境搭建 (Selenium+Python)及视频操作](https://blog.csdn.net/Faith_Lzt/article/details/119187797)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [如何使用 Python+selenium 进行 web 自动化测试?](https://blog.csdn.net/caixiangting/article/details/130581863)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值