python+selenium:數據參數化(從文件讀取數據)

 

#!/usr/bin/env python
# -*- coding=utf-8 -*-
# coding: utf-8


from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from common.read_txt import read_txt
# from common.read_csv import read_csv
from common.read_xlsx import read_xlsx
from loginfo.log_print import get_log
from common.screenshot import screenshot


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


def is_element_exist(driver, element):
    """
    判斷頁面元素是否存在,不存在拋出異常,返回flag=False
    """
    flag = True
    try:
        driver.find_element_by_css_selector(element)
        return flag

    except:
        flag = False
        return flag


def open_browser():
    """
    打開瀏覽器驅動
    :return: 返回句柄
    """
    driver = webdriver.Chrome()
    return driver


def open_url(driver, url):
    """
    打開網址
    :return:
    """
    driver.get(url)
    driver.maximize_window()


def find_element(driver, kwargs):
    """
    :param driver:瀏覽器句柄, kwargs必須是字典
    1:login_text:登錄按鈕,             //*[@id="head"]/div[1]/div[3]/a[7]
    2:user_login_button:用戶名登錄按鈕,    //*[text()='用戶名登錄']
    3:user_id:用戶名,              //*[@name=""userName""]
    4:pwd_id:密碼,                 //*[@name="password"]
    5:login_id:立即登錄按鈕,        //*[@id="TANGRAM__PSP_10__submit"]
    :return:login_text, user_login_button, user_id, pwd_id, login_id
    """
    get_ele_times(driver, 3, lambda d: d.find_element_by_xpath(kwargs['login_text'])).click()
    get_ele_times(driver, 5, lambda d: d.find_element_by_xpath(kwargs['user_login_button'])).click()
    ele_list = []
    for key in kwargs.keys():
        ele_name = driver.find_element_by_xpath(kwargs[key])
        print(ele_name)
        ele_list.append(ele_name)
    # user_id = driver.find_element_by_xpath(kwargs['user_id'])
    # pwd_id = driver.find_element_by_xpath(kwargs['pwd_id'])
    # login_id = driver.find_element_by_xpath(kwargs['login_id'])
    # ele_tuple = (user_id, pwd_id, login_id)
    return ele_list


def send_values(ele_name_list, account_dict):
    """
    :ele_name_list: 元素對象名稱組成的list
    :account_dict : 用戶要輸入的值組成的字典
    :return:
    """
    i = 2
    for key in range(len(ele_name_list)-2):
        try:
            ele_name_list[i].send_keys('')
            ele_name_list[i].send_keys(account_dict[key])
        except Exception:
            ele_name_list[i].click()
        i = i + 1


def login_test(ele_dict, account_dict):
    """
    :param ele_dict:頁面元素xpath值組成的一個字典
    :return:
    """
    log = get_log('login_test')
    log.info('登錄測試')
    driver = open_browser()
    url = 'https://www.baidu.com/'
    open_url(driver, url)
    ele_list = find_element(driver, ele_dict)
    send_values(ele_list, account_dict)

    # 斷言頁面元素是否存在,不存在則截圖
    if not is_element_exist(driver, 'xxx'):  # 定位會拋出異常
        screenshot(driver)
    driver.quit()


if __name__ == '__main__':
    """
    login_text0 = '//*[@id="head"]/div[1]/div[3]/a[7]'
    user_login_button0 = '//*[@id="TANGRAM__PSP_10__footerULoginBtn"]'
    user_id0 = '//*[@name="userName"]'
    pwd_id0 = '//*[@name="password"]'
    login_id0 = '//*[@id="TANGRAM__PSP_10__submit"]'
    ele_dict0 = {'login_text': login_text0, 'user_login_button': user_login_button0,
                 'user_id': user_id0, 'pwd_id': pwd_id0, 'login_id': login_id0}
    user_name0 = 'aaa'
    pwd0 = '123'
    account_dict0 = {'user_name': user_name0, 'pwd': pwd0}

    """
    ele_dict0 = read_txt('..\\test_file\\element.txt')
    print(ele_dict0)

    xlsx_dict = read_xlsx(path='..\\test_file\\send_values.xlsx', sheet='user_pwd')
    for account in xlsx_dict:
        print(account)
        login_test(ele_dict0, account)

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章