import time from ERP_PO_2.Website.test_case.page_object.BasePage import BasePage from selenium.webdriver.common.by import By from ERP_PO_2.Website.test_case.model.myuint import Myunit class Addpage(BasePage,Myunit): PinPai = (By.XPATH, '//*[@id="leftmenu_asset_brand"]/a') XinZeng = (By.XPATH, '//*[@id="content"]/div[2]/div/div[1]/button') # 新增按钮 PP_1 = (By.XPATH, '//*[@id="title"]') # 品牌名称 PP_2 = (By.XPATH, '//*[@id="code"]') # 品牌编码 BaoCun = (By.XPATH, '//*[@id="submitButton"]') # 保存 def CaoZuo(self,data): time.sleep(3) self.find_el(*self.PinPai).click() self.find_el(*self.XinZeng).click() self.find_el(*self.PP_1).send_keys(data[0]) self.find_el(*self.PP_2).send_keys(data[1]) self.find_el(*self.BaoCun).click() time.sleep(3) text = self.driver.switch_to.alert.text self.driver.switch_to.alert.accept() time.sleep(2) print(text) return text def CZ(driver,data): #CZ = Addpage(driver) return Addpage(driver).CaoZuo(data)以上代码封装了吗 体现在哪里
时间: 2024-04-21 22:29:51 浏览: 27
是的,以上代码进行了页面对象模式的封装。封装体现在以下几个方面:
1. 定义了一个基础页面类(BasePage),其他页面对象类继承该类,避免重复编写相同的代码。
2. 使用了By类,封装了查找元素的方法,方便代码编写和维护。
3. 将测试数据作为参数传入到方法中,提高了代码的灵活性和可重用性。
4. 将页面操作方法封装在一个方法中(CaoZuo),方便调用和管理。
5. 封装了一个CZ方法,将Addpage(driver)的实例化和操作方法的调用封装在一起,方便调用和管理。
相关问题
在Page文件夹中新建BasePage.py文件,用来存放封装好的浏览器驱动、访问地址、元素定位方法等;
示例代码如下:
```python
from selenium import webdriver
class BasePage:
def __init__(self, driver: webdriver.Chrome, url: str):
self.driver = driver
self.url = url
def open(self):
self.driver.get(self.url)
def find_element(self, locator):
return self.driver.find_element(*locator)
def find_elements(self, locator):
return self.driver.find_elements(*locator)
def click(self, locator):
self.find_element(locator).click()
def send_keys(self, locator, text):
self.find_element(locator).send_keys(text)
def clear(self, locator):
self.find_element(locator).clear()
def get_text(self, locator):
return self.find_element(locator).text
def get_current_url(self):
return self.driver.current_url
def get_window_handles(self):
return self.driver.window_handles
def switch_to_window(self, window):
self.driver.switch_to.window(window)
def switch_to_frame(self, locator):
self.driver.switch_to.frame(locator)
```
这里定义了一个名为BasePage的类,它包含了一些常用的浏览器操作方法,如打开网页、查找元素、点击元素、输入文本、清空输入框、获取文本内容、获取当前页面URL、获取窗口句柄、切换窗口、切换iframe等。这些方法可以被其他页面类继承和调用,方便代码的复用。其中,init方法接收两个参数,分别为浏览器驱动和网页地址。
E assert 'Dashboard - Leon CRM' in 'Leon CRM' E + where 'Leon CRM' = <selenium.webdriver.chrome.webdriver.WebDriver (session="1e02c84b8e24f72b5baf7d649b4e8925")>.title
这个错误提示显示了断言的实际结果,即 `'Leon CRM'`,也就是当前页面的 title。这个结果与期望的结果 `'Dashboard - Leon CRM'` 不符,导致断言失败。
这个问题可能是由于登录后的页面 title 与预期不同造成的,你可以在断言前先打印一下当前页面的 title,看看实际结果是否符合预期。修改后的代码如下所示:
```
class Test_Login_method(BasePage):
def test01_login_method(self, user, passwd):
self.get(LoginResources.URL_leons.value)
self.send_keys(LoginResources.LOC_账号, user)
self.send_keys(LoginResources.LOC_密码, passwd)
self.click(LoginResources.LOC_管理员)
self.click(LoginResources.LOC_登录按钮)
return self.driver
def test01_login(self, driver, arg):
page = Test_Login_method(driver)
res = page.test01_login_method(arg[0], arg[1])
print('当前页面 title:', res.title) # 打印页面 title
assert 'Dashboard - Leon CRM' in res.title
```
这样,在断言失败时,就可以通过打印当前页面的 title 来查看实际结果,从而找到问题所在。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)