自动化-----退出时继承上一个测试结果的登录信息

如果要继承登录,必须要在对象中初始化登录,测试用例中初始化登录。

基类:

#-*-coding:gbk-*-
import time
from selenium import webdriver
from selenium.webdriver import ActionChains



# def getBrowser(browser_type):
#     try:
#         if browser_type=="Chrome":
#             driver=webdriver.Chrome()
#         else:
#             driver=getattr(webdriver,browser_type)()
#         return driver
#     except Exception as e:
#         print(e)
#         return webdriver.Chrome()
#         #driver=webdriver.Chrome(r"D:\Python3.7\Scripts\chromedriver.exe")


class BrowerBase:
    #构造函数,获取浏览器
    def __init__(self,driver):
         #self.driver=getBrowser(browser_type)
         self.driver=driver
    #访问url
    def open_url(self,url):
        self.driver.get(url)
    #查找元素
    def locator(self,loc):
        return self.driver.find_element(*loc)
    #输入内容
    def input_(self,loc,txt):
        self.locator(loc).send_keys(txt)
    #点击操作
    def click_(self,loc):
        self.locator(loc).click()
    #清空输入框内容
    def clear(self,loc):
        self.locator(loc).clear()
    #鼠标悬浮到某位置
    def moveMouse(self,loc):
        ActionChains(self.driver).move_to_element(self.locator(loc)).perform()
    #等待几秒
    def wait(self,sj):
        time.sleep(sj)
    #获取title标题
    def get_title(self):
        return self.driver.title
    #切换到主文档窗口
    def switch_frame(self):
        self.driver.switch_to.default_content()
    #刷新F5
    def refresh_(self):
        self.driver.refresh()
    #切换到指定窗口
    def SwitchWindow(self,windowsname):
        # 首先获取主窗口的句柄保存在变量中
        mainWindow = self.driver.current_window_handle
        # 遍历所有窗口句柄
        for handle in self.driver.window_handles:
            # 先切换到该窗口
            self.driver.switch_to.window(handle)
            # 得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口
            if windowsname in self.driver.title:
                # 如果是,这个webdriver对象就是对应的该窗口,正好跳出循环
                break
        # 再在新窗口中进行相应操作
        #print(self.driver.title)
    #退出进程浏览器
    def quit_(self):
        self.driver.quit()
    #关闭浏览器
    def close_(self):
        self.driver.close()

读取文件:

#-*-coding:utf-8-*-
import os
import yaml
class ReadYaml:
    #通过init方法把yaml文件传入到这个类,若传入文件名则用传入得文件,若未传入参数则使用默认的logindata.yaml
    def __init__(self,filename=None):
        if filename:
            self.yaml_file=filename
        else:
            #获取项目路径
            current_path=os.path.dirname(os.path.abspath('.'))
            self.yaml_file=current_path+"/Data/logindata.yaml"

    # 读取yaml文件,f表示文件流,Loader=yaml.FullLoader表示加载方式
    def read_yaml(self):
        try:
            with open(self.yaml_file,mode='r',encoding='gbk') as f:
                #load读取文件对象
                data=yaml.load(f,Loader=yaml.FullLoader)
        except Exception as e:
            print("文件读取失败:%s"%e)
        f.close()
        return data

    #在某个文件中追加文件
    def write_yaml(self):
        casedata={
            "loginuser6":{
                "name":"boy",
                "pwd":"999999"
            }
        }
        #打开文件
        with open(self.yaml_file,mode='a',encoding="utf-8") as f:
            #dump是写入文件对象,allow_unicode=True预防出现乱码
            write_data=yaml.dump(casedata,f,allow_unicode=True)
            f.close()


if __name__ == '__main__':
    ry=ReadYaml("../Data/keywordsearch.yaml")
    #ry.write_yaml()

    s=ry.read_yaml()
    print(s)


页面对象类:
登录

#-*-coding:gbk-*-
import time

import allure
from selenium import webdriver
from selenium.webdriver.common.by import By

from Base.OperatingBase import BrowerBase


class LoginPage(BrowerBase):
    url= r'https://passport.jd.com/new/login.aspx?ReturnUrl=https%3A%2F%2Fwww.jd.com%2F'
    login_tab = (By.XPATH, "//*[@class='login-tab login-tab-r']")
    login_name = (By.ID, "loginname")
    login_pwd = (By.ID, "nloginpwd")
    login_btn = (By.CLASS_NAME, "login-btn")
    result_success = (By.XPATH,"//*[@class='user_plusico']/following-sibling::a")
    result_error=(By.XPATH,"//*[@class='msg-error']")
    user_logout=(By.XPATH,"//*[@class='user_logout']")
    @allure.step("step1:登录操作")
    def login(self,usrname,password):
        self.open_url(self.url)
        self.click_(self.login_tab)
        self.clear(self.login_name)
        self.input_(self.login_name,usrname)
        self.clear(self.login_pwd)
        self.input_(self.login_pwd, password)
        self.click_(self.login_btn)
        self.wait(15)

    #登录成功后,获取当前页面的用户名,判断用户名
    def login_result(self):
        if self.get_title()=='京东-欢迎登录':
            r=self.locator(self.result_error).text
        else:
            r = self.locator(self.result_success).text
        return r


退出登录

#-*-coding:gbk-*-
import allure
from selenium.webdriver.common.by import By

from Base.OperatingBase import BrowerBase


class LogOutPage(BrowerBase):
	#初始化登录
    def __init__(self,login):
        BrowerBase.__init__(self,login.driver)
    #找到账号标签
    nickname=(By.CLASS_NAME,'nickname')
    #找到退出按钮标签
    logout_text = (By.CLASS_NAME, 'link-logout')

    @allure.step("step2:退出登录")
    def logout(self):
        self.moveMouse(self.nickname)
        self.click_(self.logout_text)
        #切回到frame框架
        self.switch_frame()
        self.wait(3)
    def logoutSuccess(self):
        #返回退出后的title
        return self.get_title()

测试类:
登录:

#-*-coding:gbk-*-
import pytest
from selenium import webdriver

from Config.read_yaml import ReadYaml
from PageObject.Login_Page import LoginPage
class TestLogin:
    def setup_class(self):
        #浏览器初始化
        self.driver = webdriver.Chrome(r"D:\Python3.7\Scripts\chromedriver.exe")
        #登录初始化
        self.lp = LoginPage(self.driver)
    @pytest.mark.parametrize('data',ReadYaml('../Data/logindata.yaml').read_yaml())
    def test_login(self,data):
        self.lp.login(data["name"],data["pwd"])
        assert self.lp.login_result()==data["text"],'实际结果是:{0}'.format(data["text"])
    # def teardown_class(self):
    #     self.lp.quit_()

if __name__ == '__main__':
    pytest.main(['-vs','./test_login.py'])

退出:

#-*-coding:gbk-*-
import pytest

from PageObject.LogOut_Page import LogOutPage
from TestCase.test_login import TestLogin


class TestLogOut:
    #初始化登录
    def setup_class(self):
        self.login=TestLogin()
        self.loginout=LogOutPage(self.login)
    def test_logout_1(self):
        self.loginout.logout()
        assert self.loginout.logoutSuccess()=='京东-欢迎登录'
if __name__ == '__main__':
    pytest.main(['-vs','./test_logout.py'])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值