1.创建驱动类文件夹
driver>driver_manager.py
from selenium import webdriver class DriverManager(): def __init__(self, name='chrome'): if name == 'chrome': self.d = webdriver.Chrome() elif name == 'firefox': self.d = webdriver.Firefox() #初始化driver对象 比较简单的封装,可以写的更复杂些,比如加入浏览器配置,可以抓取浏览器日志这种 driver = DriverManager().d
if __name__=='__main__': pytest.main()
2.创建基本页面类文件夹
pages>base_pages.py
#基本页面,首页,登录页,注册页,等一些基本页面 from selenium.webdriver import ActionChains from selenium.webdriver.common.by import By from driver.driver_manager import driver class BasePage(): #打开指定URL的网页 def open(self,url): driver.get(url) #封装定位元素 def find_element(self,type,value): if type == "id": el = driver.find_element(By.ID, value) elif type == "name": el = driver.find_element(By.NAME, value) elif type == "tag": el = driver.find_element(By.TAG_NAME, value) elif type == "class": el = driver.find_element(By.CLASS_NAME, value) elif type == "link": el = driver.find_element(By.LINK_TEXT, value) elif type == "plink": el = driver.find_element(By.PARTIAL_LINK_TEXT, value) elif type == "xpath": el = driver.find_element(By.XPATH, value) elif type == "css": el = driver.find_element(By.CSS_SELECTOR, value) else: print("输入的定位方式错误") return el #点击元素封装 def click_element(self,type,value): self.find_element(type,value).click() #向目标元素输入文本 def input_data(self,type,value,text): self.find_element(type,value).send_keys(text) #鼠标移动到定位元素后悬停 def move_mouse_to_element(self,type,value): ActionChains(driver).move_to_element(self.find_element(type,value)).pause(2).perform() #切换框架 def switch_to_frame(self,id_name_or_element): driver.switch_to.frame(id_name_or_element) #切换窗口 def switch_to_windows(self,title): handles = driver.window_handles for handle in handles: driver.switch_to.window(handle) if driver.title == title: break
pages>login_page.py
class LoginPage(): pass
pages>main_pages.py
from pages.base_pages import BasePage from pages.reg_page import RegPage from pages.login_page import LoginPage class MainPage(BasePage): # 主页地址,根据自己的测试需求封装自己需要的页面 ,一般来说数据量大了,url地址写在代码中是不合适的,可以写在外部配置文件中用代码调用 url = 'http://192.168.239.128/opencart/' 会员中心 = {'type': 'link', 'value': '会员中心'} #为了方便查看,中文书写,项目中还是用英文的好 会员注册 = {'type': 'link', 'value': '会员注册'} 会员登录 = {'type': 'link', 'value': '会员登录'} 搜索框 = {'type': 'name', 'value': 'search'} 搜索按钮 = {'type': 'xpath', 'value': '//*[@id="search"]/button/i'} def open_main_page(self): self.open(self.url) def go_to_reg(self): self.move_mouse_to_element(self.会员中心['type'],self.会员中心['value']) self.click_element(self.会员注册['type'],self.会员注册['value']) return RegPage() #封装的函数会跳转到某一个其他已封装的页面类中,需要return到那个对应页面类对象 def go_to_login(self): self.move_mouse_to_element(self.会员中心['type'], self.会员中心['value']) self.click_element(self.会员登录['type'], self.会员登录['value']) return LoginPage() def search(self): self.input_data(self.搜索框['type',self.搜索框['value']]) self.click_element(self.搜索框['type'],self.搜索框['value'])
pages>reg_page.py
class RegPage(): pass
3.测试用例文件夹
testcases>test_opentcart_demo.py
import pytest from pages.main_page import MainPage class TestOpencartDemo(): def test_01_reg(self): main_page = MainPage() #初始化一个页面的对象 main_page.open_main_page() #调用封装好的函数直接跳转到主页 main_page.go_to_reg() #点击进入注册页面 def test_02_login(self): main_page = MainPage() main_page.open_main_page() main_page.go_to_login() if __name__=='__main__': pytest.main()