自动化脚本参数化

     //封装类firefoxutil

#-*- coding:utf-8 -*-
#导包
from enum import Enum
from selenium import webdriver
#导入休眠包
import time
#导入休眠的包
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

#声明类,继承object
class Firefoxutil(object):
      #打开浏览器
      def firefoxutil_start(self,url):
          #驱动
          self.driver=webdriver.Chrome(executable_path="D:\google\Chrome\Application\chromedriver.exe")
          #设置窗口最大化
          self.driver.maximize_window()
          self.driver.get(url)
          #设置休眠时间
          self.Titmesleep(ENUMS.TWO_TIME)

      #关闭浏览器
      def firefoxutil_close(self):
          self.driver.quit()
          pass

      #关闭当前网页
      def firefox_current(self):
          self.driver.close()
          pass


      #强制休眠
      def Titmesleep(self,number):
          time.sleep(number)
          pass

      #隐式休眠
      def TimeImplay(self,number):
          self.driver.implicitly_wait(number)
          pass

      #ID开始查找控件
      def FindID(self,ID):
          ids=(By.ID,ID)
          WebDriverWait(self.driver,ENUMS.TWENTY_TIME,ENUMS.ONE_HALF).until(EC.presence_of_element_located(ids))
          return self.driver.find_element_by_id(ID)

      #点击事件
      def ClickID(self,ID):
          self.FindID(ID).click()

      #输入
      def SendKeysID(self,ID,message):
          # 查找控件.首先清空数据,同时再输入内容
          self.FindID(ID).clear()
          self.FindID(ID).send_keys(message)

      #通过id获取控件内容
      def getIdText(self,ID):
          return self.FindID(ID).text

      #通过id判断控件是不是可见
      def isDispalyID(self,ID):
           return self.FindID(ID).is_displayed()

      #通过id判断控件有没有被选中
      def isSelectID(self,ID):
          return self.FindID(ID).is_selected()

      #通过id判断input标签,是不是可编辑,返回true表示可编辑,返回布尔,不可编辑
      def isEnableID(self,ID):
          return self.FindID(ID).is_enabled()

      #NAME查询控件
      def FindName(self,name):
          names=(By.NAME,name)
          WebDriverWait(self.driver,ENUMS.TWENTY_TIME,ENUMS.ONE_HALF).until(EC.presence_of_element_located(names))
          return self.driver.find_element_by_name(name)

      #点击事件
      def ClickName(self,name):
          self.FindName(name).click()

      #输入内容
      def SendKeysName(self,name,message):
          # 查找控件.首先清空数据,同时再输入内容
          self.FindName(name).clear()
          self.FindName(name).send_keys(message)

      #通过name获取控件的内容
      def getNameText(self,name):
          return self.FindName(name).text

      def isDispalyNmae(self,name):
          return self.FindName(name).is_displayed()

      def isSelectNmae(self,name):
          return self.FindName(name).is_selected()

      def isEnableNmae(self,name):
          return self.FindName(name).is_enabled()

      #class查找控件
      def FindClass(self,cls):
          clss=(By.CLASS_NAME,cls)
          WebDriverWait(self.driver,ENUMS.TWENTY_TIME,ENUMS.ONE_HALF).until(EC.presence_of_element_located(clss))

          return self.driver.find_element_by_class_name(cls)

      #点击事件
      def ClickClass(self,cls):
          self.FindClass(cls).click()

      #输入内容
      def SendKeysClass(self,cls,message):
          # 查找控件.首先清空数据,同时再输入内容
          self.FindClass(cls).clear()
          self.FindClass(cls).send_keys(message)

      #获取控件的内容
      def getClassText(self,cls):
          return self.FindClass(cls).text


      def isDispalyClass(self,cls):
          self.FindClass(cls).is_displayed()

      def isSelectClass(self, cls):
          self.FindClass(cls).is_selected()

      def isEnableClass(self, cls):
          self.FindClass(cls).is_enabled()

      # Xpath查找控件
      def FindXpath(self, xpath):
          xpaths = (By.XPATH, xpath)
          WebDriverWait(self.driver, ENUMS.TWENTY_TIME, ENUMS.ONE_HALF).until(EC.presence_of_element_located(xpaths))
          return self.driver.find_element_by_xpath(xpath)

      # 点击事件
      def ClickXpath(self, xpath):
          self.FindXpath(xpath).click()

      # 输入内容
      def SendKeysXpath(self,xpath, message):
          # 查找控件.首先清空数据,同时再输入内容
          self.FindXpath(xpath).clear()
          self.FindXpath(xpath).send_keys(message)

      # 获取控件的内容
      def getXpathText(self, xpath):
          self.FindXpath(xpath).text

      def isDispalyXpath(self, xpath):
          self.FindXpath(xpath).is_displayed()

      def isSelectXpath(self, xpath):
          self.FindXpath(xpath).is_selected()

      def isEnableXpath(self,xpath):
          self.FindXpath(xpath).is_enabled()

      # Tag查找控件
      def FindTag(self, tag):
          tags = (By.TAG_NAME, tag)
          WebDriverWait(self.driver, ENUMS.TWENTY_TIME, ENUMS.ONE_HALF).until(EC.presence_of_element_located(tags))
          return self.driver.find_element_by_tag_name(tag)

      # 点击事件
      def ClickTag(self,tag):
          self.FindTag(tag).click()

      # 输入内容
      def SendKeysTag(self, tag, message):
          # 查找控件.首先清空数据,同时再输入内容
          self.FindTag(tag).clear()
          self.FindTag(tag).send_keys(message)

      # 获取控件的内容
      def getTagText(self, tag):
          self.FindTag(tag).text

      def isDispalyTag(self, tag):
          self.FindTag(tag).is_displayed()

      def isSelectTag(self, tag):
          self.FindTag(tag).is_selected()

      def isEnableTag(self, tag):
          self.FindTag(tag).is_enabled()

      #css查找控件
      def FindCss(self, css):
          csses = (By.CSS_SELECTOR, css)
          WebDriverWait(self.driver, ENUMS.TWENTY_TIME, ENUMS.ONE_HALF).until(EC.presence_of_element_located(csses))
          return self.driver.find_element_by_css_selector(css)

      # 点击事件
      def ClickCss(self, css):
          self.FindCss(css).click()

      # 输入内容
      def SendKeysCss(self, css, message):
          # 查找控件.首先清空数据,同时再输入内容
          self.FindCss(css).clear()
          self.FindCss(css).send_keys(message)

      # 获取控件的内容
      def getCssText(self, css):
          self.FindCss(css).text

      def isDispalyCss(self, css):
          self.FindCss(css).is_displayed()

      def isSelectCss(self, css):
          self.FindCss(css).is_selected()

      def isEnableCss(self, css):
          self.FindCss(css).is_enabled()

      # Link查找控件
      def FindLink(self, link):
          links = (By.LINK_TEXT, link)
          WebDriverWait(self.driver, ENUMS.TWENTY_TIME, ENUMS.ONE_HALF).until(EC.presence_of_element_located(links))
          return self.driver.find_element_by_link_text(link)

      # 点击事件
      def ClickLink(self, link):
          self.FindLink(link).click()

      # 输入内容
      def SendKeysLink(self, link, message):
          # 查找控件.首先清空数据,同时再输入内容
          self.FindLink(link).clear()
          self.FindLink(link).send_keys(message)

      # 获取控件的内容
      def getLinkText(self, link):
          self.FindLink(link).text

      def isDispalyLink(self, link):
          self.FindLink(link).is_displayed()

      def isSelectLink(self,link):
          self.FindLink(link).is_selected()

      def isEnableLink(self, link):
          self.FindLink(link).is_enabled()

      # Link查找控件
      def FindPary(self, pary):
          parys = (By.LINK_TEXT, pary)
          WebDriverWait(self.driver, ENUMS.TWENTY_TIME, ENUMS.ONE_HALF).until(EC.presence_of_element_located(parys))
          return self.driver.find_element_by_partial_link_text(pary)

      # 点击事件
      def ClickPary(self, pary):
          self.FindPary(pary).click()

      # 输入内容
      def SendKeysPary(self, pary, message):
          # 查找控件.首先清空数据,同时再输入内容
          self.FindPary(pary).clear()
          self.FindPary(pary).send_keys(message)

      # 获取控件的内容
      def getParyText(self, pary):
          self.FindPary(pary).text

      def isDispalyPary(self, pary):
          self.FindPary(pary).is_displayed()

      def isSelectPary(self, pary):
          self.FindPary(pary).is_selected()

      def isEnablePary(self, pary):
          self.FindPary(pary).is_enabled()

      #切换窗口
      #获取当前窗口
      def getCurrentWindow(self):
          return self.driver.current_window_handle

      #获取所有窗口,进行切换
      def seitch_to_window(self,current_window):
          self.Titmesleep(ENUMS.TWO_TIME)
          #获取所有窗口
          all_windows=self.driver.window_handles
          for window in all_windows:
              if window!=current_window:
                  self.driver.switch_to.window(window)

      #通过id点击进行切换窗口的方法
      def ClickID_switch_to_window(self,ID):
           current_window=self.getCurrentWindow()
           self.ClickID(ID)
           #切换
           self.seitch_to_window(current_window)

      # 通过Name点击进行切换窗口的方法
      def ClickName_switch_to_window(self, name):
           current_window = self.getCurrentWindow()
           self.ClickName(name)
           # 切换
           self.seitch_to_window(current_window)

      # 通过Class点击进行切换窗口的方法
      def ClickClass_switch_to_window(self, cls):
           current_window = self.getCurrentWindow()
           self.ClickClass(cls)
           # 切换
           self.seitch_to_window(current_window)

      # 通过Xpath点击进行切换窗口的方法
      def ClickXpath_switch_to_window(self, xpath):
           current_window = self.getCurrentWindow()
           self.ClickXpath(xpath)
           # 切换
           self.seitch_to_window(current_window)

      # 通过Css点击进行切换窗口的方法
      def ClickCss_switch_to_window(self, css):
           current_window = self.getCurrentWindow()
           self.ClickCss(css)
           # 切换
           self.seitch_to_window(current_window)

      # 通过XTag点击进行切换窗口的方法
      def ClickTag_switch_to_window(self, tag):
           current_window = self.getCurrentWindow()
           self.ClickTag(tag)
           # 切换
           self.seitch_to_window(current_window)

      # 通过Link点击进行切换窗口的方法
      def ClickLink_switch_to_window(self, link):
           current_window = self.getCurrentWindow()
           self.ClickLink(link)
           # 切换
           self.seitch_to_window(current_window)

      # 通过Link点击进行切换窗口的方法
      def ClickPary_switch_to_window(self, pary):
           current_window = self.getCurrentWindow()
           self.ClickPary(pary)
           # 切换
           self.seitch_to_window(current_window)

      #切换frameID
      def switch_to_frame_id(self,ID):
          self.driver.switch_to.frame(self.ClickID(ID))

      # 切换frameName
      def switch_to_frame_Name(self, name):
          self.driver.switch_to.frame(self.ClickName(name))

      # 切换frameClass
      def switch_to_frame_Class(self, cls):
          self.driver.switch_to.frame(self.ClickClass(cls))

      # 切换frameXpath
      def switch_to_frame_Xpath(self, xpath):
          self.driver.switch_to.frame(self.ClickXpath(xpath))

      # 切换frameTag
      def switch_to_frame_Tag(self, tag):
          self.driver.switch_to.frame(self.ClickTag(tag))

      # 切换frameCss
      def switch_to_frame_Css(self, css):
          self.driver.switch_to.frame(self.ClickCss(css))

      # 切换frameLink
      def switch_to_frame_Link(self, link):
          self.driver.switch_to.frame(self.ClickLink(link))

      # 切换framePary
      def switch_to_frame_Pary(self, pary):
          self.driver.switch_to.frame(self.ClickPary(pary))

      #切出frame
      def checkout_frame(self):
          self.driver.switch_to.default_content()

      #执行js的定位到指定位置
      def exe_js_id(self,ID):
          self.driver.execute_script("arguments[0].scrollIntoView();",self.FindID(ID))
          pass

      #执行js的定位到指定位置
      def exe_js_Name(self,name):
          self.driver.execute_script("arguments[0].scrollIntoView();",self.FindName(name))
          pass

      #执行js定位到指定的位置
      def exe_js_Class(self,cls):
          self.driver.execute_script("arguments[0].scrollIntoView();",self.FindClass(cls))
          pass

      #执行js定位到指定位置
      def exe_js_Xpath(self,xpath):
          self.driver.execute_script("arguments[0].scrollIntoView();",self.FindXpath(xpath))
          pass

      #执行js到指定位置
      def exe_js_Tag(self,tag):
          self.driver.execute_script("arguments[0].scrollIntoView();",self.FindTag(tag))
                                     #arguments[0].scrollIntoView();
                                     #arguments[0].scrollIntoView();
          pass

      #执行js到指定位置
      def exe_js_Css(self,css):
          self.driver.execute_script("arguments[0].scrollIntoView();",self.FindCss(css))
          pass

      #执行js到指定位置
      def exe_js_Link(self,link):
          self.driver.execute_script("arguments[0].scrollIntoView();",self.FindLink(link))
          pass

      #执行js到指定位置
      def exe_js_Pary(self,pary):
          self.driver.execute_script("arguments[0].scrollIntoView();",self.FindPary(pary))
          pass

      #获取title
      def getTitle(self):
          return self.driver.title

      #断言
      #断言是单元测试语法,如果我们在这里想封装断言,必须将单元测试的self传递过去
      def AssertTitle(self,self1,expect):
          self1.assertEqual(self.getTitle(),expect)
          pass

      #断言控件内容分为八种,
      #id断言
      def AssertId(self,self1,exepect,ID):
          self1.assertEqual(self.getTitle(ID),exepect)

      # 断言控件内容分为八种,
      # id断言
      def AssertName(self, self1, exepect, name):
          self1.assertEqual(self.getTitle(name), exepect)

      # 断言控件内容分为八种,
      # Class断言
      def AssertClass(self, self1, exepect, cls):
          self1.assertEqual(self.getTitle(cls), exepect)

      # 断言控件内容分为八种,
      # id断言
      def AssertXpath(self, self1, exepect, xpath):
          self1.assertEqual(self.getTitle(xpath), exepect)

      # 断言控件内容分为八种,
      # id断言
      def AssertCss(self, self1, exepect, css):
          self1.assertEqual(self.getTitle(css), exepect)

      # 断言控件内容分为八种,
      # id断言
      def AssertLink(self, self1, exepect, link):
          self1.assertEqual(self.getTitle(link), exepect)

      # 断言控件内容分为八种,
      # id断言
      def AssertPary(self, self1, exepect, pary):
          self1.assertEqual(self.getTitle(pary), exepect)

      # 断言控件内容分为八种,
      # id断言
      def AssertTag(self, self1, exepect, tag):
          self1.assertEqual(self.getTitle(tag), exepect)


      # 断言控件内容,分为八种,通过 id断言,
      def AssertId(self, self1, expect, ID):

          self1.assertEqual(self.getIdText(ID), expect)

      def AssertClass(self, self1, expect, cls):

          self1.assertEqual(self.getClassText(cls), expect)


      def AssertName(self,self1,expect,name):
          self1.assertEqual(self.getNameText(name),expect)

      def AssertXpath(self,self1,expect,xpath):
          self1.assertEqual(self.getXpathText(xpath),expect)

      def AssertCss(self,self1,expect,css):
          self1.assertEqual(self.getCssText(css),expect)

      def AssertTag(self,self1,expect,tag):
          self1.assertEqual(self.getTagText(tag),expect)

      def AssertLink(self,self1,expect,link):
          self1.assertEqual(self.getLinkText(link),expect)

      def AssertPary(self,self1,expect,pary):
          self1.assertEqual(self.getParyText(pary),expect)

#定义枚举类
class ENUMS(Enum):
    # 两秒
    TWO_TIME = 2
    # 五秒
    FIVE_TIME = 5
    # 10 秒
    TEN_TIME = 10
    # 20 秒
    TWENTY_TIME = 20
    # 0.5 秒
    ONE_HALF = 0.5
    //打开指定网页urlUtil

# -*- coding:utf-8 -*-

class URL(object):
     def __init__(self):

        pass

     JD_LOGIN="https://passport.com/new/login.aspx?ReturnUrl=https%3A%2F%2Fwww.jd.com%2F%3Fcu%3Dtrue%26utm_source%3Dbaidu-pinzhuan%26utm_medium%3Dcpc%26utm_campaign%3Dt_288551095_baidupinzhuan%26utm_term%3D0f3d30c8dba7459bb52f2eb5eba8ac7d_0_082628e0c03044529c8e6a76f3dde1ff"

    //C 代码逻辑层
#-*- coding:utf-8 -*-

from  util import firefoxutil
#定义一个类继承object
class LoginControl(object):
    #类被实例化时候执行方法
    #对应的java里面的构造方法
    def __init__(self,firefox):
        #self.firefox=firefoxutil.Firefoxutil()

        self.firefox=firefox
        pass

    #封装输入用户名的方法
    def LoginSendkeyUwPw(self,username,password):
        #查找用户名和密码
        self.firefox.ClickClass("login-tab-r")
        self.firefox.SendKeysID("loginname",username)
        self.firefox.SendKeysID("nloginpwd", password)
        self.firefox.ClickID("loginsubmit")
        pass
     //M测试用例层

#-*- coding:utf-8 -*-
#导入csv文件
import csv
#导入os包
import os
#声明类继承object
class LoginData(object):

    #读取登陆测试用例的文件方法
    #面试题,写测试用例或者看测试用例的时候,如何知道这条测试用例能不能写自动化
    #可以在测试用例里面加一个类型,通过类型判断能不能写自动化脚本
    def getData(self):
        #指定读写路径
        #获取当前路径,如果在suit运行,当前路径就是suit路径,也就是说在哪个类运行,就是那个类的路径
        current_file=os.getcwd()
        #指定现在的文件路径
        files=os.path.dirname(current_file)+"/login/loginm/qwe.csv"
        #打开文件
        #面试题,oppo与file的区别,
        #oppo是新增的语法,file是老语法
        filename=open(files,'rb')
        #通过csv读取出来
        data=csv.reader(filename)
        return data

    #登陆页面点击所有连接的方法
    def get_click_about_me(self):

        #指定读写路径
        current_file=os.getcwd()
        files=os.path.dirname(current_file)+"/login/loginm/jdlogin_foot.csv"
        filename=open(files,'rb')
        #通过csv读取出来
        data=csv.reader(filename)
        return data
    测试用例.csv结尾的

0,关于我们,企业简介-京东商城
0,联系我们,联系我们-京东商城
0,人才招聘,京东招聘官网
0,商家入驻,商家入驻-入驻流程 - 京东全品类专题活动-京东
0,广告服务,广告服务 - 京东全品类专题活动-京东
0,手机京东,手机京东 - 京东
0,友情链接,友情链接
0,销售联盟,京东联盟
0,京东社区,京东社区 - 京东电脑、办公|游戏设备专题活动-京东
0,京东公益,京东公益
1,English Site,JD.com Global Online Shopping Site: Online Shopping for Electronics,Clothing,Toys and More
     //运行所需的代码

  

#-*- coding:utf-8 -*-
#导入单元测试
import unittest
from util import firefoxutil,urlutil
#导入控制类
from login.loginc import logincontrol
from login.loginm import login_data
class JdLogin(unittest.TestCase):

       #实例化工具类
       @classmethod
       def setUpClass(self):
           self.firefox=firefoxutil.Firefoxutil()
           self.URL=urlutil.URL()
           #实例化控制对象
           self.login=logincontrol.LoginControl(self.firefox)
           self.loginm=login_data.LoginData()
       #打开浏览器
       def setUp(self):
           self.firefox.firefoxutil_start(self.URL.JD_LOGIN)

       #关闭浏览器
       def tearDown(self):
                  self.firefox.firefoxutil_close()

       #测试用例,
       def test_us_pw(self):
           #MVC模式
           #m层对应的是测试用例层
           #v层对应的是单元测试
           #c层对应的是逻辑代码层
           #使用for循环,获取内容,同时断言
           for index in self.loginm.getData():
               self.login.LoginSendkeyUwPw(index[0].decode("UTF-8"),index[1].decode("UTF-8"))

               self.firefox.Titmesleep(firefoxutil.ENUMS.TWO_TIME)
               #休眠,因为for循环,所以我们每次登陆的时候都需要休眠
               if int(index[3].decode("UTF-8"))==0:
                   self.firefox.AssertClass(self,index[2].decode("UTF-8"),"msg-error")
                   self.firefox.Titmesleep(firefoxutil.ENUMS.TWO_TIME)


               else:
                   self.firefox.AssertTitle(self,index[2].decode("UTF-8"))
           pass

       def test_click_about_me(self):

           for index in self.loginm.get_click_about_me():
               #获取当前窗口
               self.firefox.Titmesleep(6)
               current=self.firefox.getCurrentWindow()
               print index[1].decode("UTF-8")
               #点击关于我们
               self.firefox.ClickLink_switch_to_window(index[1].decode("UTF-8"))
               #判断0,就断言下标为2
               if int(index[0].decode("UTF-8"))==0:
                   self.firefox.AssertTitle(self,index[2].decode("UTF-8"))
               else:
                   self.firefox.AssertTitle(self,index[2].decode("UTF-8")+", "+index[3].decode("UTF-8")+", "+index[4].decode("UTF-8"))
               #关闭当前网页
               self.firefox.firefox_current()
               #切换导登陆页面
               self.firefox.driver.switch_to_window(current)
           pass
     //suit类

#-*- coding:utf-8 -*-

# 导入单元测试包
import unittest
# 倒包
from unit import jdlogin
# 导入自动化测试报告
import HTMLTestRunner
# 导入os包
import os
# 设置系统编码格式
import sys
reload(sys)
sys.setdefaultencoding("UTF-8")

# 实例化 suit

suit = unittest.TestSuite()


# 将单元测试加入到测试套件里面
suit.addTest(unittest.makeSuite(jdlogin.JdLogin))


# 指定自动化测试报告路径
files = os.getcwd() + "/jd.html"
# 指定读写方式 wb 以二进制的方式进行写入  rb 以二进制的方式进行读取 rb+ 以二进制的方式进行读写
filename = open(files,'wb')

# 运行自动化测试报告
runner = HTMLTestRunner.HTMLTestRunner(stream=filename,title=u"登陆测试",description=u"这是登陆测试用例")

runner.run(suit)


 



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值