pythonselenium环境搭建,python+selenium+unittest

这篇具有很好参考价值的文章主要介绍了pythonselenium环境搭建,python+selenium+unittest。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大家好,小编为大家解答pythonselenium环境搭建的问题。很多人还不知道python+selenium+unittest,现在让我们一起来看看吧!

pythonselenium环境搭建,python+selenium+unittest,python

目录

一、 webdriver的API与定位元素

二、鼠标和键盘事件 

三、对话框与多窗口管理

四、下拉框处理

五、alter对话框处理

六、测试脚本中的等待方法

七、文件上传

八、文件下载

九、滚动条

十、自动发送邮件

十一、测试用例设计


B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)

Web应用包含超文本标记语言(HTML)、层叠样式表演(CSS)、JavaScript脚本的Web页面。

HTML表单由不同类型的元素组成的,包含<form>、<input>、<button>、<label>

一、 webdriver的API与定位元素

from selenium import webdriver

b = webdriver.Firefox()
b.get('http://www.baidu.com') #输入url
print(b.title) #打印元素
print(b.current_url) #打印url

Webdriver常用方法:

pythonselenium环境搭建,python+selenium+unittest,python

1、8种元素定位的方法 

pythonselenium环境搭建,python+selenium+unittest,python

>>> ele = b.find_element_by_id('kw')
>>> ele1=b.find_element_by_name('wd') 

2、元素操作方式

pythonselenium环境搭建,python+selenium+unittest,python

>>> ele.clear()
>>> ele.send_keys('自动化测试')
>>> b.back() #退回
>>> ele1.send_keys('测试')
>>> ele2= b.find_element_by_class_name('s_ipt')
>>> ele2.send_keys('selenium')
>>> ele3=b.find_element_by_tag_name('input')
>>> ele3.size
{'height': 0.0, 'width': 0.0}
>>> ele3.id
'3e2e100e-b754-4ce1-b1d7-7872079247da'
>>> ele2.id
'2f622532-63aa-4018-8a4c-683f382ae01a'
#id不同,右键查看页面源代码,有其他input

WebElement功能列表:

pythonselenium环境搭建,python+selenium+unittest,python

>>> b.get('http://www.dji.com')
>>> b.maximize_window()  #最大化窗口
>>> ele=b.find_element_by_link_text('消费级产品')
>>> ele.click()
>>> ele1=b.find_element_by_partial_link_text('消费级')
>>> ele1.click()
>>> ele_css=b.find_element_by_css_selector('html.js.no-touch.csstransforms3d.csstransitions body.dji-zh-CN.dji-pc nav#site-header.dui-navbar.site-header.collapsed div.navbar-container div#siteHeaderNavbar ul.navbar-category li.category-item a.ga-data') 
#审查元素后复制css路径
>>> ele_css=b.find_element_by_css_selector('input[class=\'search-input\']')  #可以定位任一元素
>>> ele_css.send_keys('社区')

如果没有元素与之匹配,则抛出NoSucnElementException异常python知识点思维导图。

其他WebElement常用方法:

pythonselenium环境搭建,python+selenium+unittest,python

3、xpath定位

  • xml路径语言:用来确定xml文档中某部分位置的语言;
  • xpath用于在xml文档中通过元素和属性进行导航;
  • xpath是一个W3C标准;
  • 对xml/html有一定的了解。

xpah节点类型:元素、属性、文本、命名空间、指令处理、注释及文档。

xpath:通过路径表达式从xml文档中选取节点或节点设置

 pythonselenium环境搭建,python+selenium+unittest,python

b.get(r'C:\Users\zhouxy\Desktop\bookmark.html')
ele = b.find_element_by_xpath('/html') #绝对路径
ele.text 
ele = b.find_element_by_xpath('/html/body/form/input') #默认第一个输入框
ele.get_attribute('type') #-->‘text’

#第二个输入框
ele1=b.find_element_by_xpath('/html/body/from/input[2]')

#并通过input下标找到
e= find.element_by_xpath('//input') #相对路径
e.get_attribute('name')

ele = b.find_element_by_xpath('//input/..')
ele.tag_name #-->form 上一级目录

e = b.find_element_by_xpath('//input[@id]') #'//input[@name="xxx"]'
#遍历所有
ele= b.find_element_by_xpath('//*') #-->html
#运用函数
ele= b.find_element_by_xpath('//*[count[input]=2]') #-->form
#从表单开始定位
ele= b.find_element_by_xpath('//form[@id=“form”/span/input]')  
#组合定位
ele= b.find_element_by_xpath('//input[@name="wd"] and @id="kw"]')

 pythonselenium环境搭建,python+selenium+unittest,python

ele1 = b.find_element_by_xpath('//*[local-name()="input"]')  #相当于('//input'),默认取第一个input

ele2 = b.find_element_by_xpath('//*[start-with(local-name(),"i")]')

ele3 = b.find_element_by_xpath('//*[contain(local-name(),"i")]') 

ele4 = b.find_element_by_xpath('//*[contain(local-name(),"i")]') 
ele5 = b.find_element_by_xpath('//*[contain(local-name(),"i")][last()]') #包含i的tag_name倒数第一个元素
ele5 = b.find_element_by_xpath('//*[contain(local-name(),"i")][last()]-1') #包含i目录倒数第二个元素
ele.get_attribute('name') #获取元素的属性

ele6 = b.find_element_by_xpath('//*[string-length(local-name())=3]')  #长度等于3的tag_name

ele7=b.find_element_by_xpath('//title | // input[last()]')  #-->title

4、css selector定位

pythonselenium环境搭建,python+selenium+unittest,python

e= find_element_by_css_selector(".s_ipt")
e= find_element_by_css_selector("#kw")

 通过属性选择器定位:

pythonselenium环境搭建,python+selenium+unittest,python

二、鼠标和键盘事件 

1、AcitonChains类与输入事件

  1. from selenium.webdriver.common.action_chains import AcitonChains
  2. ActionCharis(driver):用于生成模拟用户行为
  3. perform():执行存储行为

2、鼠标事件

pythonselenium环境搭建,python+selenium+unittest,python

>>> from selenium import webdriver
>>> b = webdriver.Firefox()
>>> b.get('http://www.dji.com')
>>> from selenium.webdriver.common.action_chains import ActionChains
>>> ele=b.find_element_by_link_text('消费级产品')
>>> ActionChains(b).move_to_element(ele).perform()
>>> sub_ele=b.find_element_by_link_text('御 Mavic Air')
>>> sub_ele.click()

 pythonselenium环境搭建,python+selenium+unittest,python

3、键盘事件:send_keys()

from selenium.webdriver.common keys import Keys

 pythonselenium环境搭建,python+selenium+unittest,python

>>> s =b.find_element_by_name('q')
>>> s.sent_keys('大疆')
>>> s.clear()
>>> s.send_keys('大疆啊')
>>> from selenium.webdriver.common.keys import Keys
>>> s.send_keys(Keys.BACKSPACE)
>>> s.send_keys(Keys.CONTROL,'a')
>>> s.send_keys(Keys.CONTROL,'x')
>>> s.send_keys(Keys.CONTROL,'v')
>>> ele=b.find_element_by_link_text('大疆司空')
>>> s.send_keys(Keys.ENTER)

 三、对话框与多窗口管理

>>> d = webdriver.Firefox()
>>> d.get('http://www.baidu.com')
>>> d.find_element_by_id('kw').clear()
>>> d.find_element_by_id('kw').send_keys('大疆科技')
>>> d.find_element_by_id('su').click()
>>> d.find_element_by_partial_link_text('DJI大疆创新 - 所有产品').click()
>>> d.window_handles
['4294967297', '4294967301'] #列出所有的句柄
>>> d.current_window_handle
'4294967297' #显示当前句柄
>>>d.switch_to_window(d.window_handles[0]) #切换句柄
>>> d.close()  #关闭tab
>>> d.quit()   #退出浏览器

四、下拉框处理

 需要特定的Select类并导入,from selenium.webdriver.support.select import Select

pythonselenium环境搭建,python+selenium+unittest,python

五、alter对话框处理

需要先切换到弹框上的,alert = driver.switch_to_alert()

Alter方法:

 pythonselenium环境搭建,python+selenium+unittest,python

>>>alert=b.swich_to_alert

六、测试脚本中的等待方法

1、元素等待机制

隐式等待:为了解决由于网络延迟或利用Ajax动态加载元素所导致的程序响应时间不一致。当一个测试用例执行的时候,WebDriver找不到任意一个元素,将会等待,等待时间超过后,则抛出NoSuchElementException。

显式等待:可以为脚本设置一些预置或定制化的条件,等待条件满足后再执行测试。显示等待可以只作用于有同步需求的测试用例。

WebDriver提供WebDriverWait类和expected_conditions类来实现显式等待。

pythonselenium环境搭建,python+selenium+unittest,python

2、WebDriverWair方法:

构造函数:def __init__(self, driver, timeout, poll_frequency=POLL_FREQUENCY)
poll_frequency-->check-->until-->method return Not False
                      -->not until-->method return False
import  time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait


Url = 'http://10.10.200.86:10004/ccs-web/index.jsp'
Account = 'zhouxy'
Password = '111'

def get_ele_time(driver,times,func):
    return WebDriverWait(driver,times).until(func)

def login_test():
    b = webdriver.Firefox()  #启动浏览器
    b.get(Url) #输入url
    b.maximize_window()
    login_ele = get_ele_time(b,10,lambda b:b.find_element_by_xpath('/html/body/form/ \
    table/tbody/tr[3]/td/table/tbody/tr[3]/td/table/tbody/tr[1]/td[7]/img'))  #也可以用expected_conditions有定义好的预期等待条件

    username_ele = b.find_element_by_id('j_username') #用户名元素
    username_ele.clear() #清空
    username_ele.send_keys(Account) #输入用户名
    password_ele = b.find_element_by_id('j_password')
    password_ele.clear()
    password_ele.send_keys(Password)
    login_ele.click()
    try :
        ele = b.find_element_by_link_text('Login fail: 错误的凭证')
        print('登录失败')
    except:
        print('登录成功')
    time.sleep(10)
    b.close()

if __name__ == '__main__':
    login_test()
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

'''
10秒钟等待浏览器弹出的对话框,如果出现,就点击确定按钮
'''
WebDriverWait(chromedriver,10).until(EC.alert_is_present()).accept()

七、文件上传

1、普通上传(通过input框)

# -*- coding: utf-8 -*-
from selenium import webdriver

driver = webdriver.Firefox()
driver.get('http://sahitest.com/demo/php/fileUpload.htm')
upload = driver.find_element_by_id('file')
upload.send_keys('d:\\baidu.py')  # send_keys
print upload.get_attribute('value')  # check value

driver.quit()

2、flash上传(非input标签)

有几种解决方案:

  1. autoIT,借助外力,我们去调用其生成的au3或exe文件。
  2. Python pywin32库,识别对话框句柄,进而操作
  3. SendKeys库
  4. keybd_event,跟3类似,不过是模拟按键,ctrl+a,ctrl+c, ctrl+v…

八、文件下载

对于Firefox,需要设置Profile:

  • browser.download.dir:指定下载路径
  • browser.download.folderList:设置成 2 表示使用自定义下载路径;设置成 0 表示下载到桌面;设置成 1 表示下载到默认路径
  • browser.download.manager.showWhenStarting:在开始下载时是否显示下载管理器
  • browser.helperApps.neverAsk.saveToDisk:对所给出文件类型不再弹出框进行询问
from selenium import webdriver
from time import sleep

profile = webdriver.FirefoxProfile()
profile.set_preference('browser.download.dir', 'd:\\')
profile.set_preference('browser.download.folderList', 2)
profile.set_preference('browser.download.manager.showWhenStarting', False)
profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/zip')

driver = webdriver.Firefox(firefox_profile=profile)

driver.get('http://sahitest.com/demo/saveAs.htm')
driver.find_element_by_xpath('//a[text()="testsaveas.zip"]').click()
sleep(3)
driver.quit()

九、滚动条

from selenium import webdriver
import os
dr = webdriver.Firefox()
dir = os.path.join('file:///'+os.getcwd()+'\\h1.html')
dr.get(dir)
dr.implicitly_wait(3)
js='document.getElementsByClassName("scroll")[0].scrollTop=0'
# 就是这么简单,修改这个元素的scrollTop就可以
dr.execute_(js)
document.getElementsByClassName("scroll")[0].scrollHeight # 获取滚动条高度
document.getElementsByClassName("scroll")[0].scrollWidth # 获取横向滚动条宽度
document.getElementsByClassName("scroll")[0].scrollLeft=xxx # 控制横向滚动条位置

十、自动发送邮件

1、SMTP模块发送邮件

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议。

import  smtplib
from email.mime.text import MIMEText
from email.header import Header

def sent_email(SMTP_host,Username,Password,Content,Subject,Revicer):
    #1.实例化SMTP
    smtp = smtplib.SMTP()

    #2.链接邮件服务器
    smtp.connect(SMTP_host)

    #3.配置发送者邮箱密码
    smtp.login(Username,Password)

    #4.配置发送内容msg
    msg = MIMEText(Content,'html','utf-8') # 三个参数:第一个为文本内容,第二个置文本格式,第三个设置编码
    msg['Subject']= Header(Subject,'utf-8') #邮件主题
    msg['From'] = Username
    msg['To'] = Revicer

    #5.配置发送邮箱,接收邮箱,以及发送内容
    smtp.sendmail(Username,Revicer,msg.as_string())

    #6.关闭邮件服务
    smtp.quit()

if __name__ == '__main__':
    sent_email('smtp.163.com','****@163.com','******','<html><h1>你好</h1></html>','邮件主题','****@163.com')

2、email模块

email模块下有mime包,mime英文全称为“Multipurpose Internet Mail Extensions”,即多用途互联网邮件扩展,是目前互联网电子邮件普遍遵循的邮件技术规范。

该mime包下常用的有三个模块:text,image,multpart

  • 构造一个邮件对象就是一个Message对象
  • 如果构造一个MIMEText对象,就表示一个文本邮件对象(如果发送内容为中文,需要选择“plain”,要不然无法显示)
  • 如果构造一个MIMEImage对象,就表示一个作为附件的图片
  • 要把多个对象组合起来,就用MIMEMultipart对象
  • MIMEBase可以表示任何对象。它们的继承关系如下:
Message
+- MIMEBase
   +- MIMEMultipart
   +- MIMENonMultipart
      +- MIMEMessage
      +- MIMEText
      +- MIMEImage

2.1 添加普通文本

text = "This is a text\nHere is the link you want:\nhttp:\\www.baidu.com"
2 msg = MINEText(text, 'plain', utf-8)

2.2 添加超文本

html = """
<html>  
  <body>  
    <p> 
       Here is the <a href="http://www.baidu.com">link</a> you wanted.
    </p> 
 </body>  
</html>  
"""    
msg = MIMEText(html,'html', 'utf-8')  

2.3 添加附件

sendfile = open('D:\\python\\sendfile.txt', 'rb').read()
msg = MINEText(sendfile, 'base64', 'utf-8')
msg['Content-type'] = 'application/octet-stream'
msg['Content-Disposition'] = 'attachment;filename= "文件显示名字.txt"'

2.4 添加图片

sendimagefile=open(r'D:\pythontest\testimage.png','rb').read()
msg = MIMEImage(sendimagefile)
msg.add_header('Content-ID','<image1>')
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.header import Header
import os

def send_file(SMTP_host,from_addr,from_pwd,to_addr,file_addr,subject):

    smtp = smtplib.SMTP(SMTP_host)

    smtp.login(from_addr,from_pwd)
    # 邮件主题/发送者/接受者
    msg = MIMEMultipart()
    msg['Subject']= Header(subject,'utf-8')
    msg['From'] = from_addr
    msg['To'] = to_addr
    # 邮件正文
    msg.attach(MIMEText('如附件所示','plain','utf-8'))
    # 邮件附件
    with open(file_addr,'rb') as f :
        file = f.read()
    att = MIMEText(file,'base64','utf-8')
    att['Content-type'] = 'application/octet-stream'
    att['Content-Dispositon'] = 'attachment;filename="test.html"' #文件名
    msg.attach(att)

    smtp.sendmail(from_addr,to_addr,msg.as_string())
    smtp.quit()

if __name__ == '__main__':
    try:
        dir = os.path.join(os.getcwd()+'//h1.html')
        send_file('smtp.163.com','****@163.com','******','****@163.com',dir,'主题')
        print('邮件发送成功')
    except smtplib.SMTPException:
        print('Error:无法发送邮件')

3、自动发送邮件

import unittest,smtplib
from test_mathfunc import TestMathFunc
from HTMLTestRunner import HTMLTestRunner
import time,os,sys
email_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(email_path)
from web_test.test_email import send_file

def SendReport(report_dir):
    # 获取最新报告
    case_list = os.listdir(report_dir) #获取report目录下所有文件,以列表形式返回
    case_list.sort(key=lambda fn:os.path.getatime(report_dir+'\\'+fn)) #对case_list中所有元素按时间从大到小排序
    latest_report = os.path.join(report_dir,case_list[-1])
    print(latest_report)
    return latest_report

if __name__ == '__main__':
    suite = unittest.TestSuite()
    tests = [TestMathFunc('test_add'),TestMathFunc('test_minus'),TestMathFunc('test_divide')]
    suite.addTests(tests)
    now = time.strftime('%Y%m%d%H%M%S')
    with open(now+'HTMLReport.html','wb') as f:
        runner = HTMLTestRunner(stream=f,
                                title='计算器测试',
                                deion = '测试报告',
                                verbosity=2)
        runner.run(suite)
    R = SendReport("C:\\Users\\zhouxy\\PycharmProjects\\untitled\\unit_test")
    try:
        send_file('smtp.163.com','****@163.com','******','****@163.com',R,'主题')
        print('邮件发送成功')
    except smtplib.SMTPException:
        print('Error:无法发送邮件')

十一、测试用例设计

pythonselenium环境搭建,python+selenium+unittest,python

pythonselenium环境搭建,python+selenium+unittest,python

pythonselenium环境搭建,python+selenium+unittest,python

数据设计:字典形式

pythonselenium环境搭建,python+selenium+unittest,python

最后在我的QQ技术交流群里整理了我这10几年软件测试生涯整理的一些技术资料,包括:电子书,简历模块,各种工作模板,面试宝典,自学项目等。如果在学习或工作中遇到问题,群里也会有大神帮忙解答,群号 798478386 ( 备注CSDN555 )

全套软件测试自动化测试教学视频

pythonselenium环境搭建,python+selenium+unittest,python

 300G教程资料下载【视频教程+PPT+项目源码】

pythonselenium环境搭建,python+selenium+unittest,python

全套软件测试自动化测试大厂面经

pythonselenium环境搭建,python+selenium+unittest,python
 文章来源地址https://www.toymoban.com/news/detail-765335.html

目录

一、 webdriver的API与定位元素

二、鼠标和键盘事件 

三、对话框与多窗口管理

四、下拉框处理

五、alter对话框处理

六、测试脚本中的等待方法

七、文件上传

八、文件下载

九、滚动条

十、自动发送邮件

十一、测试用例设计


B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)

Web应用包含超文本标记语言(HTML)、层叠样式表演(CSS)、JavaScript脚本的Web页面。

HTML表单由不同类型的元素组成的,包含<form>、<input>、<button>、<label>

一、 webdriver的API与定位元素

from selenium import webdriver

b = webdriver.Firefox()
b.get('http://www.baidu.com') #输入url
print(b.title) #打印元素
print(b.current_url) #打印url

Webdriver常用方法:

pythonselenium环境搭建,python+selenium+unittest,python

1、8种元素定位的方法 

pythonselenium环境搭建,python+selenium+unittest,python

>>> ele = b.find_element_by_id('kw')
>>> ele1=b.find_element_by_name('wd') 

2、元素操作方式

pythonselenium环境搭建,python+selenium+unittest,python

>>> ele.clear()
>>> ele.send_keys('自动化测试')
>>> b.back() #退回
>>> ele1.send_keys('测试')
>>> ele2= b.find_element_by_class_name('s_ipt')
>>> ele2.send_keys('selenium')
>>> ele3=b.find_element_by_tag_name('input')
>>> ele3.size
{'height': 0.0, 'width': 0.0}
>>> ele3.id
'3e2e100e-b754-4ce1-b1d7-7872079247da'
>>> ele2.id
'2f622532-63aa-4018-8a4c-683f382ae01a'
#id不同,右键查看页面源代码,有其他input

WebElement功能列表:

pythonselenium环境搭建,python+selenium+unittest,python

>>> b.get('http://www.dji.com')
>>> b.maximize_window()  #最大化窗口
>>> ele=b.find_element_by_link_text('消费级产品')
>>> ele.click()
>>> ele1=b.find_element_by_partial_link_text('消费级')
>>> ele1.click()
>>> ele_css=b.find_element_by_css_selector('html.js.no-touch.csstransforms3d.csstransitions body.dji-zh-CN.dji-pc nav#site-header.dui-navbar.site-header.collapsed div.navbar-container div#siteHeaderNavbar ul.navbar-category li.category-item a.ga-data') 
#审查元素后复制css路径
>>> ele_css=b.find_element_by_css_selector('input[class=\'search-input\']')  #可以定位任一元素
>>> ele_css.send_keys('社区')

如果没有元素与之匹配,则抛出NoSucnElementException异常python知识点思维导图。

其他WebElement常用方法:

pythonselenium环境搭建,python+selenium+unittest,python

3、xpath定位

  • xml路径语言:用来确定xml文档中某部分位置的语言;
  • xpath用于在xml文档中通过元素和属性进行导航;
  • xpath是一个W3C标准;
  • 对xml/html有一定的了解。

xpah节点类型:元素、属性、文本、命名空间、指令处理、注释及文档。

xpath:通过路径表达式从xml文档中选取节点或节点设置

 pythonselenium环境搭建,python+selenium+unittest,python

b.get(r'C:\Users\zhouxy\Desktop\bookmark.html')
ele = b.find_element_by_xpath('/html') #绝对路径
ele.text 
ele = b.find_element_by_xpath('/html/body/form/input') #默认第一个输入框
ele.get_attribute('type') #-->‘text’

#第二个输入框
ele1=b.find_element_by_xpath('/html/body/from/input[2]')

#并通过input下标找到
e= find.element_by_xpath('//input') #相对路径
e.get_attribute('name')

ele = b.find_element_by_xpath('//input/..')
ele.tag_name #-->form 上一级目录

e = b.find_element_by_xpath('//input[@id]') #'//input[@name="xxx"]'
#遍历所有
ele= b.find_element_by_xpath('//*') #-->html
#运用函数
ele= b.find_element_by_xpath('//*[count[input]=2]') #-->form
#从表单开始定位
ele= b.find_element_by_xpath('//form[@id=“form”/span/input]')  
#组合定位
ele= b.find_element_by_xpath('//input[@name="wd"] and @id="kw"]')

 pythonselenium环境搭建,python+selenium+unittest,python

ele1 = b.find_element_by_xpath('//*[local-name()="input"]')  #相当于('//input'),默认取第一个input

ele2 = b.find_element_by_xpath('//*[start-with(local-name(),"i")]')

ele3 = b.find_element_by_xpath('//*[contain(local-name(),"i")]') 

ele4 = b.find_element_by_xpath('//*[contain(local-name(),"i")]') 
ele5 = b.find_element_by_xpath('//*[contain(local-name(),"i")][last()]') #包含i的tag_name倒数第一个元素
ele5 = b.find_element_by_xpath('//*[contain(local-name(),"i")][last()]-1') #包含i目录倒数第二个元素
ele.get_attribute('name') #获取元素的属性

ele6 = b.find_element_by_xpath('//*[string-length(local-name())=3]')  #长度等于3的tag_name

ele7=b.find_element_by_xpath('//title | // input[last()]')  #-->title

4、css selector定位

pythonselenium环境搭建,python+selenium+unittest,python

e= find_element_by_css_selector(".s_ipt")
e= find_element_by_css_selector("#kw")

 通过属性选择器定位:

pythonselenium环境搭建,python+selenium+unittest,python

二、鼠标和键盘事件 

1、AcitonChains类与输入事件

  1. from selenium.webdriver.common.action_chains import AcitonChains
  2. ActionCharis(driver):用于生成模拟用户行为
  3. perform():执行存储行为

2、鼠标事件

pythonselenium环境搭建,python+selenium+unittest,python

>>> from selenium import webdriver
>>> b = webdriver.Firefox()
>>> b.get('http://www.dji.com')
>>> from selenium.webdriver.common.action_chains import ActionChains
>>> ele=b.find_element_by_link_text('消费级产品')
>>> ActionChains(b).move_to_element(ele).perform()
>>> sub_ele=b.find_element_by_link_text('御 Mavic Air')
>>> sub_ele.click()

 pythonselenium环境搭建,python+selenium+unittest,python

3、键盘事件:send_keys()

from selenium.webdriver.common keys import Keys

 pythonselenium环境搭建,python+selenium+unittest,python

>>> s =b.find_element_by_name('q')
>>> s.sent_keys('大疆')
>>> s.clear()
>>> s.send_keys('大疆啊')
>>> from selenium.webdriver.common.keys import Keys
>>> s.send_keys(Keys.BACKSPACE)
>>> s.send_keys(Keys.CONTROL,'a')
>>> s.send_keys(Keys.CONTROL,'x')
>>> s.send_keys(Keys.CONTROL,'v')
>>> ele=b.find_element_by_link_text('大疆司空')
>>> s.send_keys(Keys.ENTER)

 三、对话框与多窗口管理

>>> d = webdriver.Firefox()
>>> d.get('http://www.baidu.com')
>>> d.find_element_by_id('kw').clear()
>>> d.find_element_by_id('kw').send_keys('大疆科技')
>>> d.find_element_by_id('su').click()
>>> d.find_element_by_partial_link_text('DJI大疆创新 - 所有产品').click()
>>> d.window_handles
['4294967297', '4294967301'] #列出所有的句柄
>>> d.current_window_handle
'4294967297' #显示当前句柄
>>>d.switch_to_window(d.window_handles[0]) #切换句柄
>>> d.close()  #关闭tab
>>> d.quit()   #退出浏览器

四、下拉框处理

 需要特定的Select类并导入,from selenium.webdriver.support.select import Select

pythonselenium环境搭建,python+selenium+unittest,python

五、alter对话框处理

需要先切换到弹框上的,alert = driver.switch_to_alert()

Alter方法:

 pythonselenium环境搭建,python+selenium+unittest,python

>>>alert=b.swich_to_alert

六、测试脚本中的等待方法

1、元素等待机制

隐式等待:为了解决由于网络延迟或利用Ajax动态加载元素所导致的程序响应时间不一致。当一个测试用例执行的时候,WebDriver找不到任意一个元素,将会等待,等待时间超过后,则抛出NoSuchElementException。

显式等待:可以为脚本设置一些预置或定制化的条件,等待条件满足后再执行测试。显示等待可以只作用于有同步需求的测试用例。

WebDriver提供WebDriverWait类和expected_conditions类来实现显式等待。

pythonselenium环境搭建,python+selenium+unittest,python

2、WebDriverWair方法:

构造函数:def __init__(self, driver, timeout, poll_frequency=POLL_FREQUENCY)
poll_frequency-->check-->until-->method return Not False
                      -->not until-->method return False
import  time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait


Url = 'http://10.10.200.86:10004/ccs-web/index.jsp'
Account = 'zhouxy'
Password = '111'

def get_ele_time(driver,times,func):
    return WebDriverWait(driver,times).until(func)

def login_test():
    b = webdriver.Firefox()  #启动浏览器
    b.get(Url) #输入url
    b.maximize_window()
    login_ele = get_ele_time(b,10,lambda b:b.find_element_by_xpath('/html/body/form/ \
    table/tbody/tr[3]/td/table/tbody/tr[3]/td/table/tbody/tr[1]/td[7]/img'))  #也可以用expected_conditions有定义好的预期等待条件

    username_ele = b.find_element_by_id('j_username') #用户名元素
    username_ele.clear() #清空
    username_ele.send_keys(Account) #输入用户名
    password_ele = b.find_element_by_id('j_password')
    password_ele.clear()
    password_ele.send_keys(Password)
    login_ele.click()
    try :
        ele = b.find_element_by_link_text('Login fail: 错误的凭证')
        print('登录失败')
    except:
        print('登录成功')
    time.sleep(10)
    b.close()

if __name__ == '__main__':
    login_test()
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

'''
10秒钟等待浏览器弹出的对话框,如果出现,就点击确定按钮
'''
WebDriverWait(chromedriver,10).until(EC.alert_is_present()).accept()

七、文件上传

1、普通上传(通过input框)

# -*- coding: utf-8 -*-
from selenium import webdriver

driver = webdriver.Firefox()
driver.get('http://sahitest.com/demo/php/fileUpload.htm')
upload = driver.find_element_by_id('file')
upload.send_keys('d:\\baidu.py')  # send_keys
print upload.get_attribute('value')  # check value

driver.quit()

2、flash上传(非input标签)

有几种解决方案:

  1. autoIT,借助外力,我们去调用其生成的au3或exe文件。
  2. Python pywin32库,识别对话框句柄,进而操作
  3. SendKeys库
  4. keybd_event,跟3类似,不过是模拟按键,ctrl+a,ctrl+c, ctrl+v…

八、文件下载

对于Firefox,需要设置Profile:

  • browser.download.dir:指定下载路径
  • browser.download.folderList:设置成 2 表示使用自定义下载路径;设置成 0 表示下载到桌面;设置成 1 表示下载到默认路径
  • browser.download.manager.showWhenStarting:在开始下载时是否显示下载管理器
  • browser.helperApps.neverAsk.saveToDisk:对所给出文件类型不再弹出框进行询问
from selenium import webdriver
from time import sleep

profile = webdriver.FirefoxProfile()
profile.set_preference('browser.download.dir', 'd:\\')
profile.set_preference('browser.download.folderList', 2)
profile.set_preference('browser.download.manager.showWhenStarting', False)
profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/zip')

driver = webdriver.Firefox(firefox_profile=profile)

driver.get('http://sahitest.com/demo/saveAs.htm')
driver.find_element_by_xpath('//a[text()="testsaveas.zip"]').click()
sleep(3)
driver.quit()

九、滚动条

from selenium import webdriver
import os
dr = webdriver.Firefox()
dir = os.path.join('file:///'+os.getcwd()+'\\h1.html')
dr.get(dir)
dr.implicitly_wait(3)
js='document.getElementsByClassName("scroll")[0].scrollTop=0'
# 就是这么简单,修改这个元素的scrollTop就可以
dr.execute_(js)
document.getElementsByClassName("scroll")[0].scrollHeight # 获取滚动条高度
document.getElementsByClassName("scroll")[0].scrollWidth # 获取横向滚动条宽度
document.getElementsByClassName("scroll")[0].scrollLeft=xxx # 控制横向滚动条位置

十、自动发送邮件

1、SMTP模块发送邮件

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议。

import  smtplib
from email.mime.text import MIMEText
from email.header import Header

def sent_email(SMTP_host,Username,Password,Content,Subject,Revicer):
    #1.实例化SMTP
    smtp = smtplib.SMTP()

    #2.链接邮件服务器
    smtp.connect(SMTP_host)

    #3.配置发送者邮箱密码
    smtp.login(Username,Password)

    #4.配置发送内容msg
    msg = MIMEText(Content,'html','utf-8') # 三个参数:第一个为文本内容,第二个置文本格式,第三个设置编码
    msg['Subject']= Header(Subject,'utf-8') #邮件主题
    msg['From'] = Username
    msg['To'] = Revicer

    #5.配置发送邮箱,接收邮箱,以及发送内容
    smtp.sendmail(Username,Revicer,msg.as_string())

    #6.关闭邮件服务
    smtp.quit()

if __name__ == '__main__':
    sent_email('smtp.163.com','****@163.com','******','<html><h1>你好</h1></html>','邮件主题','****@163.com')

2、email模块

email模块下有mime包,mime英文全称为“Multipurpose Internet Mail Extensions”,即多用途互联网邮件扩展,是目前互联网电子邮件普遍遵循的邮件技术规范。

该mime包下常用的有三个模块:text,image,multpart

  • 构造一个邮件对象就是一个Message对象
  • 如果构造一个MIMEText对象,就表示一个文本邮件对象(如果发送内容为中文,需要选择“plain”,要不然无法显示)
  • 如果构造一个MIMEImage对象,就表示一个作为附件的图片
  • 要把多个对象组合起来,就用MIMEMultipart对象
  • MIMEBase可以表示任何对象。它们的继承关系如下:
Message
+- MIMEBase
   +- MIMEMultipart
   +- MIMENonMultipart
      +- MIMEMessage
      +- MIMEText
      +- MIMEImage

2.1 添加普通文本

text = "This is a text\nHere is the link you want:\nhttp:\\www.baidu.com"
2 msg = MINEText(text, 'plain', utf-8)

2.2 添加超文本

html = """
<html>  
  <body>  
    <p> 
       Here is the <a href="http://www.baidu.com">link</a> you wanted.
    </p> 
 </body>  
</html>  
"""    
msg = MIMEText(html,'html', 'utf-8')  

2.3 添加附件

sendfile = open('D:\\python\\sendfile.txt', 'rb').read()
msg = MINEText(sendfile, 'base64', 'utf-8')
msg['Content-type'] = 'application/octet-stream'
msg['Content-Disposition'] = 'attachment;filename= "文件显示名字.txt"'

2.4 添加图片

sendimagefile=open(r'D:\pythontest\testimage.png','rb').read()
msg = MIMEImage(sendimagefile)
msg.add_header('Content-ID','<image1>')
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.header import Header
import os

def send_file(SMTP_host,from_addr,from_pwd,to_addr,file_addr,subject):

    smtp = smtplib.SMTP(SMTP_host)

    smtp.login(from_addr,from_pwd)
    # 邮件主题/发送者/接受者
    msg = MIMEMultipart()
    msg['Subject']= Header(subject,'utf-8')
    msg['From'] = from_addr
    msg['To'] = to_addr
    # 邮件正文
    msg.attach(MIMEText('如附件所示','plain','utf-8'))
    # 邮件附件
    with open(file_addr,'rb') as f :
        file = f.read()
    att = MIMEText(file,'base64','utf-8')
    att['Content-type'] = 'application/octet-stream'
    att['Content-Dispositon'] = 'attachment;filename="test.html"' #文件名
    msg.attach(att)

    smtp.sendmail(from_addr,to_addr,msg.as_string())
    smtp.quit()

if __name__ == '__main__':
    try:
        dir = os.path.join(os.getcwd()+'//h1.html')
        send_file('smtp.163.com','****@163.com','******','****@163.com',dir,'主题')
        print('邮件发送成功')
    except smtplib.SMTPException:
        print('Error:无法发送邮件')

3、自动发送邮件

import unittest,smtplib
from test_mathfunc import TestMathFunc
from HTMLTestRunner import HTMLTestRunner
import time,os,sys
email_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(email_path)
from web_test.test_email import send_file

def SendReport(report_dir):
    # 获取最新报告
    case_list = os.listdir(report_dir) #获取report目录下所有文件,以列表形式返回
    case_list.sort(key=lambda fn:os.path.getatime(report_dir+'\\'+fn)) #对case_list中所有元素按时间从大到小排序
    latest_report = os.path.join(report_dir,case_list[-1])
    print(latest_report)
    return latest_report

if __name__ == '__main__':
    suite = unittest.TestSuite()
    tests = [TestMathFunc('test_add'),TestMathFunc('test_minus'),TestMathFunc('test_divide')]
    suite.addTests(tests)
    now = time.strftime('%Y%m%d%H%M%S')
    with open(now+'HTMLReport.html','wb') as f:
        runner = HTMLTestRunner(stream=f,
                                title='计算器测试',
                                deion = '测试报告',
                                verbosity=2)
        runner.run(suite)
    R = SendReport("C:\\Users\\zhouxy\\PycharmProjects\\untitled\\unit_test")
    try:
        send_file('smtp.163.com','****@163.com','******','****@163.com',R,'主题')
        print('邮件发送成功')
    except smtplib.SMTPException:
        print('Error:无法发送邮件')

十一、测试用例设计

pythonselenium环境搭建,python+selenium+unittest,python

pythonselenium环境搭建,python+selenium+unittest,python

pythonselenium环境搭建,python+selenium+unittest,python

数据设计:字典形式

pythonselenium环境搭建,python+selenium+unittest,python

最后在我的QQ技术交流群里整理了我这10几年软件测试生涯整理的一些技术资料,包括:电子书,简历模块,各种工作模板,面试宝典,自学项目等。如果在学习或工作中遇到问题,群里也会有大神帮忙解答,群号 798478386 ( 备注CSDN555 )

全套软件测试自动化测试教学视频

pythonselenium环境搭建,python+selenium+unittest,python

 300G教程资料下载【视频教程+PPT+项目源码】

pythonselenium环境搭建,python+selenium+unittest,python

全套软件测试自动化测试大厂面经

pythonselenium环境搭建,python+selenium+unittest,python
 

到了这里,关于pythonselenium环境搭建,python+selenium+unittest的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python + Selenium 自动化测试入门-环境搭建

    1、python 开发环境安装         python官网下载地址:https://www.python.org/downloads/         命令行查看安装python版本:python --version  python -V 2、pycharm 开发工具安装         pycharm官网下载地址:​​​​​​https://www.jetbrains.com/pycharm/download/ 3、selenium 工具包安装         命令行

    2023年04月14日
    浏览(61)
  • selenium+python自动化测试之环境搭建

    最近由于公司有一个向谷歌网站上传文件的需求,需要进行web的自动化测试,选择了selenium这个自动化测试框架,以前没有接触过这门技术,所以研究了一下,使用python来实现自动化脚本,从环境搭建到实现脚本运行。 selenium是一个用于Web应用程序测试的工具。Selenium测试直接

    2024年01月19日
    浏览(62)
  • python+selenium+pycharm自动化测试环境搭建

    1. 下载Python Python Release Python 3.8.0 | Python.org 本人电脑是64位的,下载相应文件。 进入cmd(windows命令提示符)下面输入\\\"Python\\\"命令。 (如果提示python不是内部或外部命令!别急,去配置一下环境变量吧) 修改我的电脑-属性-高级-环境变量-系统变量中的PATH为: 变量名:PATH 变量值:

    2023年04月08日
    浏览(60)
  • PyCharm 搭建 Selenium + Python 的自动化测试环境

    1、下载和安装 Python: 访问官方 Python 网站(https://www.python.org/downloads/)。 根据操作系统选择适合的 Python 版本,下载安装程序并按照向导完成安装。 2、下载和安装 PyCharm: 访问 JetBrains 官方网站(https://www.jetbrains.com/pycharm/)。 根据操作系统选择适合的版本,下载安装程序

    2024年02月04日
    浏览(55)
  • Selenium+Python+Pycharm自动化环境搭建具体步骤

    一、python下载:建议选择3.4以上的版本 官网下载地址: Download Python | Python.org 下载后自行进行安装,安装python需要配置环境变量,安装时可勾选“add python to path”的选项。勾选之后会自动将python添加到系统环境变量Path中。也可以选择手动添加: 进入编辑系统环境变量--选择

    2024年02月09日
    浏览(69)
  • selenium3.0+python之环境搭建的方法步骤

    本文目标: 使用selenium3.0+python3操纵浏览器,打开百度网站。(相当于selenium的hello world) 环境基础:python3已安装,pycharm编辑器已安装。 第一步:安装selenium 打开cmd窗口,输入 pip install selenium ,然后回车。 第二步:安装WebDriver 1)下载WebDriver 由于selenium是通过调用浏览器的

    2024年02月02日
    浏览(43)
  • linux服务器搭建python+selenium+chrome运行环境

    第一步(安装python3.6.8): 安装参考步骤:python3.6.8环境安装 第二步(安装和创建python3虚拟环境): 第三步(在虚拟环境安装依赖包): 第四步(安装chrome和chromedriver): 第五步(安装scrapyd环境): 第六步(安装虚拟图像环境Xvfb): 运行实例代码测试: ps:当前依赖:requirements.txt 百度网盘:链

    2024年02月07日
    浏览(48)
  • Selenium+Python自动化脚本环境搭建的全过程

    * 本文仅介绍环境的搭建,不包含任何脚本编写教程。 先整体说一下需要用到工具 1、Python环境(包括pip) 2、谷歌浏览器(包括对应的WebDriver) 详细步骤: 1、下载安装包 Python Releases for Windows | Python.org   下载完成过后,打开进行安装, 先把下面的add path打钩 ,然后一直下

    2024年01月17日
    浏览(65)
  • Python+Selenium3+Chrome自动化测试环境搭建

    写在最前面,因为各种原因,搭建该环境方法多种多样。在本教程中,展示环境搭建的详细步骤。在不同软硬件环境下安装报错,可找出原因,百度排错。 本博客的具体操作视频请移步B站: https://www.bilibili.com/video/BV1oe4y1w7yr/?spm_id_from=333.999.list.card_archive.clickvd_source=585bb8c205

    2024年02月02日
    浏览(62)
  • UI自动化环境的搭建(python+pycharm+selenium+chrome)

    最近在做一些UI自动化的项目,为此从环境搭建来从0到1,希望能够帮助到你,同时也是自我的梳理。将按照如下进行开展: 1、python的下载、安装,python环境变量的配置。 2、pycharm开发工具的下载安装。 3、selenium的安装。 4、chrome的选择。 一、python的下载。 1、去python官网:

    2024年02月13日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包