要把这些内容导入自己的电脑上,下节课使用

 

一步步导入调用,填坑,最终在ClientSelenium.py中实例化,拉起webdriver和浏览器和打开目标url

通过本次复习收获,课堂的视频一定再看一遍并按照步骤重新搭建框架,才能把知识点真正搞明白

config.ini

[Driver]
chrome = E:\PageObject\driver\chromedriver.exe
firefox = E:\PageObject\driver\geckodriver.exe

[Url]
ali_url = https://618.tmall.com
baidu_url = https://www.baidu.com/

setting.py

import os
#E:\PageObject
project_path = os.path.dirname(os.path.abspath("."))
driver_path = project_path + "\\driver"
ini_path = project_path +"\\Conf\\config.ini"

ReadIni.py

from configparser import ConfigParser   # 可以把类名重命名 as cf
from Conf.setting import *
from time import sleep

#util/ReadIni.py

#读取文件 project/Conf/config.ini
#封装函数 类名

#ConfigParser() 实例化一个读取ini的赋予对象
#新建一个类读取ini的类 类里面的成员方法cf  cf方法绑定ConfigParser()
#cf读取testdata下面的绝对路径,encoding="utf-8" :编译格式

#定义了两个函数方法,完全解耦的
#第一个函数作用是拿到某个集合名称下面的所有内容
#这个通过传统json格式返回对象items,包裹dict()
#第二个函数作用是一层层拿,根据某个集合名称下面的options的key拿到最终的value
#根据传入的参数

class ReadIni(object):
    def __init__(self,ini_path):  #project_path + "\\..."
        self.cf = ConfigParser()   #configparser库的类名 ,少了()没有参数
        self.cf.read(ini_path, encoding="utf-8")   #ini_path读出来以后=cf.read  返回是cf

    def get_item_section(self,sectionName):    # sectionName 读取什么里面的内容?
        "获取配置文件指定的section下面的所有内容"
        optionDict = dict(self.cf.items(sectionName))
        return optionDict  #字典

    def get_option_value(self, sectionName, optionName):
        "返回对应option键值对的value ??"
        value = self.cf.get(sectionName,optionName)
        return value

#实例化
#第一件事情拿到Url下面所有的集合
#第二件事情拿到阿里url的value
if __name__ == '__main__':    #隔离一下
    ri = ReadIni(ini_path)    #这里给参数,是因为有构造函数吗?
    print(ri.get_item_section("Url"))
    print(ri.get_option_value("Url","baidu_url"))
    print(ri.get_item_section("Driver"))
    print(ri.get_option_value("Driver", "chrome"))

Base.py

# 只有用到的部分
from Conf.setting import *  #其他都被这个文件导入了, from后面跟着是文件夹绝对路径,可以想想比如os
from util.ReadIni import ReadIni #也可以放入Conf\setting.py
pc =ReadIni(ini_path)
class Base(object):
    def chrome_path(self):
        "谷歌的浏览器驱动"
        #读取驱动
        return pc.get_option_value("Driver", "chrome") #把driver目录拷贝到一级目录下。 这里之前写错了,传错了一个函数

    def firefox_path(self):
        "火狐的浏览器驱动"
        return pc.get_option_value("Driver", "firefox")

    def baidu_url(self):
        "百度的网址"
        return pc.get_option_value("Url", "baidu_url")

    def ali_url(self):
        "天猫的网址"
        return pc.get_option_value("Url", "ali_url")

# b = Base()
# print(b.chrome_path())
# print(b.baidu_url())
ClientSelenium.py
from selenium import webdriver
from util.Base import Base
base = Base()   #调用类,没有参数()

#只开放了基础api的,定位器请自己学习封装完成作业,下节课在讲带保护的高级封装
class ClientSelenium(object):
    """通过封装把Page的行为压缩在这里"""
    def get_driver(self,driver, url):
        "拉起webdriver和浏览器和打开目标url   可以用于setUpClass的初始化"
        if driver == 'firefox' or driver == 'Firefox' or driver == 'F' or driver == 'f':
            exe_path = base.firefox_path()  #第二个功能是包裹在第一个功能下面的   base代码稍等
            self.driver = webdriver.Firefox(executable_path=exe_path)
        elif driver == 'Chrome' or driver == 'chrome' or driver == 'Ch' or driver == 'ch':
            exe_path = base.chrome_path()
            self.driver = webdriver.Chrome(executable_path=exe_path)
        else:
            print("输入在预期以外")

        url = base.baidu_url()
        self.driver.get(url) #区域3
        return self.driver



    def quit(self):
        self.driver.quit()


if __name__ == '__main__':
    a = ClientSelenium()
    a.get_driver("chrome", "baidu_url")   #调用config中的url,需要相同作用的函数导出路径
    a.quit()

 test_baiduV_logina.py

用unittest.TestCase方式实现,这里不应该这样用,否则前面的配置就无意义了。

应该要使用suite 来写case吗?

import unittest  #好像不该用unittest,ClientSelenium中的设置没怎么起作用
from selenium import webdriver  #这里应该用不到,ClientSelenium.py中配置过了
from util.ClientSelenium import ClientSelenium
import time

class BaiduV_Login(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        open_baidu = ClientSelenium()
        cls.driver = open_baidu.get_driver("chrome", "baidu_url")
        return cls.driver

    # def test_a_open_baiduV(self):
    #     self.driver.find_element_by_name("tj_trvideo").click()

    def test_b_open_login(self):  #加判断,断言等,
        "找到打开登陆界面的方法,很多疑惑应该就可以解决了"
        # self.driver.find_element_by_partial_link_text()
        # self.driver.find_element_by_link_text()
        # self.driver.find_element_by_xpath('//*[@id="loginbtn"]').click()
        self.driver.find_element_by_xpath('//*[@id="u1"]/a[7]').click()  #百度主页面打开登陆窗口,网不好替代
        time.sleep(2)   #需要等待,否则一闪而过。。。

    def test_c_normal(self):   #加判断,断言等,
        self.driver.find_element_by_id("TANGRAM__PSP_10__footerULoginBtn").click()
        time.sleep(2)

    def test_d_userName(self):    #加判断,断言等,
        self.driver.find_element_by_id("TANGRAM__PSP_10__userName").send_keys("testerhome")
        time.sleep(2)

    def test_e_password(self):     #加判断,断言等,
        self.driver.find_element_by_id("TANGRAM__PSP_10__password").send_keys("testerhome")
        time.sleep(5)




    @classmethod
    def tearDownClass(cls):
        cls.driver.quit()


if __name__ == '__main__':
    unittest.main()

#测试过程中遇到网络很差,一直不能刷新跳转,该用哪些方法处理?
#有时直接不能调起浏览器,是什么情况?

 

posted on 2018-07-25 22:10  你猜我猜你猜我猜不猜  阅读(295)  评论(0编辑  收藏  举报