功能自动化测试工具——Selenium篇

一、selenium  硒,是一个自动化测试工具。

测试形式可分为:手动测试和自动测试

测试方法有:白盒测试和黑盒测试

selenium在python中的主要应用就是可以完全模拟人对浏览器的操作,对数据进行获取动态数据由代码生成,在页面初始化的过程中是没有也无法获取,但是可以通过selenium来进行获取。有些数据是需要登录以后才能获取的,比如说好友列表,评论,消费记录等等。登录后获取cookie才能进行以上的操作,但是使用selenium以后,可以避免人工登录,只需要得到账号密码即可实现selenium代替登录。

selenium的特点:

1、由程序控制浏览器进行操作,而不是手动操作浏览器

2、程序控制浏览器进行操作的时候,速度非常慢,所以要谨慎使用selenium

3、使用selenium控制浏览器的时候,需要下载浏览器对应的驱动程序

4、selenium为开源 免费  但是更新速度没有浏览器快  

from selenium import webdriver
driver = webdriver.Firefox()#使用网页驱动来运行火狐浏览器
driver.get('http://www.baidu.com')#通过驱动来执行指定的网页
“”“
selenium 提供了找到元素的方法  find_element_by_xx  (这些方法全部都是用python实现的 )
如果只是想对这个元素进行查找  定位 建议使用  xpath或者css selecotor
如果需要对找到的内容进行点击等操作,建议使用find_element_by_xx (find 找到;element 元素;节点;标签  by通过)
”“”
driver.find_element_by_id('kw').send_keys('helloworld')#通过id查找
driver.find_element_by_name('wd').send_keys('csdn')#通过name值来查找
driver.find_element_by_class_name('s_ipt').send_keys(u'中国')#如果后面有中文 那么前面加个u(unicode)
driver.find_element_by_tag_name('input')#通过标签名字来进行查找tag_name
driver.find_element_by_xpath('//formp[@id="form"]/span/input[id="kw"]')

二、selenium登录

from selenium import webdriver
driver = webdriver.Firefox()
driver.get('https://i.meishi.cc/login.php?redirect=http%3A%2F%2Fwww.meishij.net%2F')#一个需要登录的网站
driver.find_element_by_name('username').send_keys('[email protected]')
driver.find_element_by_class_name('password').send_keys('123456789')
driver.find_element_by_xpath('//div[@class="nl_loginitem"]/input[@class="submit"]').click
#click  点击;单机   代码化点击登录按钮
#以上代码可以完成登录

三、关于selenium的一些操作

1、按键操作

from selenium.webdriver.common.keys import Keys
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
time.sleep(3)#代码休眠时间  为了防止网速跟不上代码运行速度 而导致系统不能正常运行
driver.find_element_by_id('kw').send_keys('selenium')#向输入框中发送想要输入的值
driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'a')#ctrl+a 全选输入框内的全部内容
driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'x')#ctrl+x 剪切上步全选的内容

2、时间等待

selenium 由网页驱动驱使浏览器进行操作,速度慢是一大特点,经常会出现代码执行完了,但是网页内容还没有加载完毕。里面的标签还没有显示出来,如果这时候还没有操作里面的标签,代码就会爆出异常。

时间等待有两种方法:WebDriverWait()和time.sleep()

1、都是让程序等待执行的时间

2、time的时间是固定的,但是长短不会随着标签的加载速度而改变。WebDriverWait时间是不固定的,等待多少时间是看标签的加载时间和固定的指定的时间

3、如果在指定的时间内,标签仍然没有加载出来,那么time和WebDriverWait都会爆出异常

from selenium.webdriver.support.ui import WebDriverWait
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
button = driver.find_element_by_id('su')
#WebDriverWait网页等待
#值1:等待的对象    值2:等待的时间
#WebDriverWait 经常和until 以及until not 一起使用
#lambda 匿名函数  is_displayed 是否已经显示
is_visible = WebDriverWait(driver,5).until(lambda driver:button.is_displayed())
print(is_visible)
button.click()

3、window切换

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
current_window = driver.current_window_handle#获取当前window对象
print(current_window,driver.title)#获取当前window编号和网页标题
driver.find_element_by_name('tj_trnews').click()
news = WebDriverWait(driver,10).until(lambda driver:driver.find_element_by_css_selector('
hdline0 .a3'))
news.click()

#获取所有窗口
all_window = driver.window_handles
for window in all_window:
    if window != current_window:
        driver.switch_to.window(window)
title = driver.find_element_by_css_selector('.text_title h1')
WebDriverWait(driver,10).until(lambda driver:title.is_displayed())
driver.switch_to.window(current_window)
print(driver.find_element_by_css_selector('#footer span').text)

未完

你可能感兴趣的:(功能自动化测试工具——Selenium篇)