<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      pytest-架構1

      參考:http://www.rzrgm.cn/linuxchao/p/linuxchao-pytest-Actual.html

      架構結構

      config

      |-config
      |-|-init.py
      |-|-conf.py
      |-|-config.ini

      conf.py

      放的是一些配置信息,全局變量,比如根目錄在哪兒

      使用方法:

      config.ini

      放的是一些xpath的位置

      1. INI文件的格式很簡單,最基本的三個要素是:parameters,sections和comments。
      2. INI所包含的最基本的“元素”就是parameter;每一個parameter都有一個name和一個value
      3. 所有的parameters都是以sections為單位結合在一起的
      4. 在INI文件中注釋語句是以分號“;”開始的

        使用方法:
          # 用戶名輸入框
          username = do_conf.get_locators_or_account('LoginPageElements', 'username')
          # 密碼輸入框
          password = do_conf.get_locators_or_account('LoginPageElements', 'password')
      

      data

      |-data
      |-|-init.py
      |-|-attachment
      |-|-contact_data.py
      |-|-login_data.py
      |-|-send_mail_data.py
      |-|-tcData.xlsx

      attachmen

      這是發信用的附件

      login_data.py

      這里存放的是測試數據,比如登錄需要什么數據就寫在這里
      寫法上用類的方法
      調用方法:
      login_data = LoginData
      @pytest.mark.parametrize('username, password, expect', login_data.login_success_data)

      class LoginData(object):
          """用戶登錄測試數據"""
          login_success_data = [
              (
                  "daido1",
                  "daido001",
                  "ログアウト"
              )
          ]
      
          login_fail_data = [
              (
                  "daido1",
                  "daido11111111",
                  " 登錄失敗"
              ),
              (
                  "daido111111111",
                  "daido001",
                  " 登錄失敗"
              ),
              (
                  "linux",
                  "xiaochao",
                  " 登錄失敗"
              )
          ]
      ![](https://img2020.cnblogs.com/blog/1951341/202009/1951341-20200914142450249-486594020.png)
      
      
      if __name__ == '__main__':
          pass
      
      

      tcData.xlsx

      Page

      BasePage.py

      存放一些共通方法

      class BasePage(object):
          """結合顯示等待封裝一些selenium內置方法"""
      
        def __init__(self, driver, timeout=30):
              self.byDic = {
                  'id': By.ID,
                  'name': By.NAME,
                  'class_name': By.CLASS_NAME,
                  'xpath': By.XPATH,
                  'link_text': By.LINK_TEXT
              }
              self.driver = driver
              self.outTime = timeout
      
          def find_element(self, by, locator):
              """
              find alone element
              :param by: eg: id, name, xpath, css.....
              :param locator: id, name, xpath for str
              :return: element object
              """
          def find_elements(self, by, locator):
              """
              find group elements
              :param by: eg: id, name, xpath, css.....
              :param locator: eg: id, name, xpath for str
              :return: elements object
              """
          def is_element_exist(self, by, locator):
              """
              assert element if exist
              :param by: eg: id, name, xpath, css.....
              :param locator: eg: id, name, xpath for str
              :return: if element return True else return false
              """
          def is_alert(self):
              """
              assert alert if exsit
              :return: alert obj
              """
          def switch_to_frame(self, by, locator):
              """判斷frame是否存在,存在就跳到frame"""
          def switch_to_default_frame(self):
              """返回默認的frame"""
          def get_alert_text(self):
              """獲取alert的提示信息"""
          def get_element_text(self, by, locator, name=None):
              """獲取某一個元素的text信息"""
          def load_url(self, url):
              """加載url"""
          def get_source(self):
              """獲取頁面源碼"""
          def send_keys(self, by, locator, value=''):
              """寫數據"""
          def clear(self, by, locator):
              """清理數據"""
          def click(self, by, locator):
              """點擊某個元素"""
          def sleep(num=0):
              """強制等待"""
          def ctrl_v(self, value):
              """ctrl + V 粘貼"""
          def enter_key():
              """enter 回車鍵"""
      
          def wait_element_to_be_located(self, by, locator):
              """顯示等待某個元素出現,且可見"""
          def get_page_source(self):
              return self.get_source()
      

      LoginPage.py

      存放頁面的方法

      class LoginPage(BasePage):
          # 配置文件讀取元素
          do_conf = ParseConFile()
          # 選擇密碼登錄的按鈕
          password_login_btn = do_conf.get_locators_or_account('LoginPageElements', 'password_login_btn')
          # 登錄框外的iframe
          frame = do_conf.get_locators_or_account('LoginPageElements', 'frame')
      
          def login(self, username, password):
              """登錄流程"""
              self.open_url()
              self.click_password_login_btn()
              # self.switch_login_frame()
              self.input_username(username)
              self.input_password(password)
              self.click_login_btn()
      
          def open_url(self):
              return self.load_url('http://daido.sitetest1.com/')
              #return self.load_url('https://mail.126.com')
      
          def click_password_login_btn(self):
              return self.click(*LoginPage.password_login_btn)
      
          def switch_login_frame(self):
              return self.switch_to_frame(*LoginPage.frame)
      
          def clear_username(self):
              return self.clear(*LoginPage.username)
      
          def input_username(self, username):
              self.clear_username()
              return self.send_keys(*LoginPage.username, username)
      
          def clear_password(self):
              return self.clear(*LoginPage.password)
      
          def input_password(self, password):
              self.clear_password()
              return self.send_keys(*LoginPage.password, password)
      
          def click_login_btn(self):
              return self.click(*LoginPage.loginBtn)
      
          def switch_default_frame(self):
              return self.switch_to_default_frame()
      
          def get_error_text(self):
              return self.get_element_text(*LoginPage.error_head)
      
          def get_login_success_account(self):
              return self.get_element_text(*LoginPage.account)
      
      
      if __name__ == "__main__":
          pass
      
      

      util


      這里存放的是一些封裝好的方法

      TestCases

      @pytest.mark.loginTest
      class TestLogin(object):
          """登錄"""
          login_data = LoginData
      
          @pytest.mark.parametrize('username, password, expect', login_data.login_success_data)
          def test_login(self, open_url, username, password, expect):
              login_page = open_url
              login_page.login(username, password)
              time.sleep(3)
              actual = login_page.get_login_success_account()
              assert expect in actual, "登錄成功, 斷言失敗"
              login_page.switch_default_frame()
      
          @pytest.mark.parametrize('username, password, expect', login_data.login_fail_data)
          def test_fail(self, open_url, username, password, expect):
              login_page = open_url
              login_page.login(username, password)
              actual = login_page.get_error_text()
              assert actual == expect, "登錄失敗, 斷言失敗"
      
      
      if __name__ == "__main__":
          pytest.main(['-v', 'test_loginCase.py'])
      
      posted @ 2020-09-14 16:22  Alice1005  閱讀(300)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产精品一区二区中文| 国产成人亚洲日韩欧美| 免费AV片在线观看网址| 网友自拍视频一区二区三区| 人妻中文字幕精品系列| 视频| 极品无码国模国产在线观看| 亚洲综合精品一区二区三区| 国内精品人妻无码久久久影院导航| 国偷自产一区二区三区在线视频 | 国语对白做受xxxxx在线中国| 无码av岛国片在线播放| 中文字幕精品人妻av在线| 麻豆精品在线| 福利一区二区在线播放| 上杭县| 国产一区二区在线激情往| 亚洲人成电影在线天堂色| 黑巨人与欧美精品一区| 欧美性猛交xxxx乱大交丰满| 亚洲中文字幕国产综合| 精品亚洲欧美高清不卡高清| 亚洲综合精品一区二区三区| 国产av寂寞骚妇| 久久精品岛国AV一区二区无码| 中文字幕亚洲制服在线看| 欧洲国产成人久久精品综合| 精品无码专区久久久水蜜桃| 人人爽亚洲aⅴ人人爽av人人片| 日韩精品国产二区三区| 亚洲中文字幕精品一区二区三区| 午夜免费福利小电影| 亚洲欧洲日韩国内精品| 91亚洲国产成人久久精品| 秋霞av鲁丝片一区二区| 毛片内射久久久一区| 色午夜久久男人操女人| 亚洲午夜无码久久久久小说| 精品一区二区中文字幕| 欧美变态另类zozo| 青草成人精品视频在线看|