软件测试之Selenium

1. Selenium介绍

        Selenium 是最广泛使用的开源 Web UI(用户界面)自动化测试套件之一。Selenium 支持的语言包括C#,Java,Perl,PHP,Python 和 Ruby。目前,Selenium Web 驱动程序最受 Python 和 C#欢迎。 Selenium 测试脚本可以使用任何支持的编程语言进行编码,并且可以直接在大多数现代 Web 浏览器中运行。在爬虫领域 selenium 同样是一把利器,能够解决大部分的网页的反爬问题。

2. Selenium安装

        打开pycharm终端,然后在终端中输入以下指令:

 可以输入selenium==版本号,来下载指定的版本号。

3. 下载浏览器驱动(edge为例 )

        网址:Microsoft Edge WebDriver | Microsoft Edge Developer

        找到与浏览器对应的版本下载即可。验证是否有效:

import time
from selenium import webdriver

driver = webdriver.Edge('D:\software_test_tool\driver\msedgedriver.exe')
driver.maximize_window()
driver.implicitly_wait(10)
driver.get('http://www.baidu.com')
time.sleep(3)
driver.quit()

        如果能顺利打开网站,并且3秒之后退出,则表示安装成功。下面展示内容都以www.baidu.com为例,除特别说明。

4. Selenium的元素选取

        常见的元素定位方式:id、name、class name、tag、link、partial link text、xpath、css selector,其中tag,link和partial link text一般不用

        id:如果某个元素由id属性,那么当id属性值唯一时,则可以利用该属性的值定位;如果id属性的值是动态id(一串无序的字母或者数字)时,则不能使用。

driver.find_element_by_id('su') #定位百度一下按钮

        name:根据name属性的值来定位,但是如果name属性的值在当前页面不唯一,则无法定位

driver.find_element_by_name('wd').send_keys('宫水三叶') #定位百度搜索框,并传入搜索内容

        class name:class属性的值,不唯一的概率很大

driver.find_element_by_class_name('s_ipt').send_keys('宫水三叶') #定位百度搜索框,传入参数

        xpath: /:代表的直接子节点       //:代表后代子节点   []中需要加入@符号

driver.find_element_by_xpath('//input[@id="kw"]').send_keys('宫水三叶')

        快捷方式,直接锁定所需行,右击复制选择xpath类型。

        css selector:根据标签以及标签的属性进行定位

driver.find_element_by_css_selector("input[class='s_ipt']").send_keys('宫水三叶')

5. Selenium中的浏览器操作

        常见的操作:设置浏览器缩放大小、浏览器的前进和后退、浏览器的刷新

#设置浏览器大小
driver.set_window_size(1080,800)

# 浏览器后退
driver.back()


# 浏览器前进
driver.forward()

#浏览器刷新
driver.refresh()

6. Selenium中webdriver常见方法

        元素点击click、文本内容清除clear、文本内容输入send_keys

driver.find_element_by_xpath('//*[@id="kw"]').send_keys('宫水二叶')
time.sleep(2)
driver.find_element_by_xpath('//*[@id="kw"]').clear()
time.sleep(2)
driver.find_element_by_xpath('//*[@id="kw"]').send_keys('宫水三叶')
driver.find_element_by_xpath('//*[@id="su"]').click()

        submit提交表单:作用与点击搜索一下,表示进行下一步操作

#driver.find_element_by_xpath('//*[@id="su"]').click()
driver.find_element_by_xpath('//*[@id="kw"]').submit()

        其他操作:size获取文本框大小,text获取元素文本,get_attribute(name)获取属性值,is_displayed()查看该元素用户是否可见。

search_element=driver.find_element_by_xpath('//*[@id="kw"]')
print(search_element.size) #百度搜索框大小
print(driver.find_element_by_xpath('//*[@id="s-top-left"]/div/a').text) #返回对应文本信息
print(driver.find_element_by_xpath('//*[@id="su"]').get_attribute('value'))#获取百度一下的value值
print(driver.find_element_by_xpath('//*[@id="s-usersetting-top"]').is_displayed())#返回百度右上角设置按键是否可见

7. Selenium的鼠标事件

        鼠标操作封装在ActionChains类中,常用方法:

                perform():执行所有ActionChains中存储的行为

                context_click():右击

                double_click():双击

                drag_and_drop():拖动

                move_to_element():鼠标悬停

from openweb import Driver
# from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver import ActionChains
from canshu import url
driver = Driver().getdriver()
driver.get(url)
element = driver.find_element_by_xpath('//*[@id="s-usersetting-top"]')
ActionChains(driver).move_to_element(element).perform()

 8. Selenium的键盘事件

        常用命令:send_keys(Keys.BACKSPACE) :删除键

                          send_keys(Keys.SPACE) :空格键

                          send_keys(Keys.TAB) :制表键

                          send_keys(Keys.ESCAPE) :回退键

                          send_keys(Keys.ENTER) :回车键

                          send_keys(Keys.CONTROL,'a') :全选

                          send_keys(Keys.CONTROL,'c') :复制

                          send_keys(Keys.CONTROL,'v') :粘贴

import time
from openweb import Driver
from canshu import *
from selenium.webdriver.common.keys import Keys
driver = Driver().getdriver()
driver.get(url)
driver.find_element_by_xpath('//*[@id="kw"]').send_keys('宫水三叶ye')
time.sleep(2)
#调用删除键
driver.find_element_by_xpath('//*[@id="kw"]').send_keys(2*Keys.BACKSPACE)

9. 获取断言信息

        常见的断言信息有:网页中的标签名,网页标题,网页的url

from openweb import Driver
from canshu import *
driver = Driver().getdriver()
driver.get(url)
driver.find_element_by_xpath('//*[@id="kw"]').send_keys('宫水三叶')
driver.find_element_by_xpath('//*[@id="su"]').click()
contents = driver.find_elements_by_xpath('//div[@id="content_left"]//div//h3//a')
print(contents)
for c in contents: #网页中的内容
    print(c.text)
print(driver.title) #网页标题
print(driver.current_url) #网页的url

10. Selenium中的元素等待

        为了解决页面加载太快,而代码执行过快,元素定位不到的问题

        强制等待:time.sleep() 使用python自带模块实现

        隐式等待:implicitly_wait(time) 对于页面的所有内容都有效,判断如果某个元素没有在规定time内加载出来,就报错,如果加载出来了,那就往后执行  

        显式等待:显式等待需要给没一个元素单独设置。

from openweb import Driver
from canshu import *
#显式等待元素定位通过By实现
from selenium.webdriver.common.by import By
#显式等待设置
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = Driver().getdriver()
driver.get(url)
'''
WebDriverWait(driver,5,0.6)中的参数分别表示浏览器driver,最大超时时间,轮询时间
EC.presence_of_element_located() 里面接受的是元素定位方式和具体的表达式,要传入一个元组
'''
button = WebDriverWait(driver,5,0.6).until(EC.presence_of_element_located((By.ID,'kw')))
button.send_keys('宫水三叶')
button.submit()

11. Selenium的窗口切换

        再打开多个窗口时,需要对最新打开的窗口进行操作时,要进行窗口切换

import time
from openweb import Driver
from canshu import *
driver = Driver().getdriver()
driver.get(url)
driver.find_element_by_xpath('//*[@id="kw"]').send_keys('宫水三叶')
driver.find_element_by_xpath('//*[@id="su"]').click()
driver.find_element_by_xpath('//*[@id="1"]/div[1]/h3/a/div/div/p/span/span').click()
time.sleep(2)
#获取所有的窗口句柄
windows = driver.window_handles
driver.switch_to_window(windows[-1])
# driver.switch_to.window(windows[-1]) #两种方式都可以
driver.find_element_by_xpath('//*[@id="J-lemma-main-wrapper"]/div[1]/div/div/div[1]/div[1]/div[1]/div/span[2]').click()

12. Selenium的表单切换

        当页面中存在表单的时候,一般会嵌套在页面的内层,使用时则需先定位表单,才能进行下一步操作。

from openweb import Driver
driver = Driver().getdriver()
driver.get('http://mail.163.com')
'''
switch_to.frame() 中默认可以写 该iframe标签的id和name属性的值,但是id和name要唯一
还可以通过其他元素定位方式定位
'''
element = driver.find_element_by_xpath('//*[@frameborder="0"]')
driver.switch_to.frame(element)
driver.find_element_by_xpath('//*[@data-placeholder="邮箱账号或手机号码"]').send_keys('1222014302')
driver.find_element_by_xpath('//*[@data-placeholder="输入密码"]').send_keys('123456')
driver.find_element_by_xpath('//*[@id="dologin"]').click()
#切换到最外层
driver.switch_to.default_content()
driver.find_element_by_xpath('/html/body/div[2]/div[2]/a[2]').click()

13. Selenium弹窗处理

        常见的弹窗类型:普通alter弹窗(只有确认按钮)、confirm弹窗(确定和取消按钮)、prompt弹窗(确定和取消按钮,并且需要输入内容)

#普通弹窗
common_alter = driver.switch_to.alter
print(common_alter.text) #输出弹窗信息
common_alter.accept() #点击确认按钮

#confirm弹窗
confirm_alter = driver.switch_to.alter
print(confirm_alter.text)
confirm_alter.dismiss() #点击取消按钮
#confirm_alter.accept()

#prompt弹窗
prompt_alter = driver.switch_to.alter
prompt_alter.send_keys(content)
prompt_alter.accept()/dismiss()

14. Selenium下拉选择框处理

        定位下拉框的三种方式:索引定位、value值定位和text文本定位

from selenium.webdriver.support.ui import Select
s1 = Select(driver.find_element_by_xpath('path'))

#通过索引定位
s1.select_by_index(0) #下标从0开始
#通过value定位
s1.select_by_value('03')
#通过文本信息定位
s1.select_by_visible_text('谷歌搜索')

15. Selenium文件上传

        如果文件上传功能是使用input标签实现的,则直接选中input标签,调用send_keys即可。

driver.find_element_by_xpath('').send_keys('上传文件对应本地路径')

16. Selenium关闭浏览器

        close:如果该浏览器有多个标签页面,则会关闭第一个标签页

                    如果浏览器只有一个标签页,则会关闭整个浏览器

        quit:直接关闭整个浏览器

  • 26
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值