下面是基于python+selenium的二次封装的实现攻略:
一、什么是基于python+selenium的二次封装
基于python+selenium的二次封装是指在selenium的基础上,利用python语言的特性进行封装,以便于自己或他人在后续的测试过程中更加高效地使用selenium。
二、为什么要进行二次封装
基于Python+selenium自带的功能通常较为单一或原始,难以满足一些高度细分化的需求。而二次封装可以结合自己或者团队的经验进行更适合实际需求的封装,还可以减少代码量,更加易读,更加易用。
三、基于python+selenium的二次封装的实现
1.创建基础类
首先,我们需要创建一个基础类,该类将初始化浏览器及运行时环境,还包括打开网页、关闭网页、调用元素等函数。
from selenium import webdriver
class BasePage:
def __init__(self, url):
self.driver = webdriver.Chrome()
self.driver.get(url)
def find_element(self, *args, **kwargs):
return self.driver.find_element(*args, **kwargs)
def close(self):
self.driver.quit()
2.封装元素定位函数
我们通常需要定位网页中的元素,而每次定位元素时,都需要写一个相同的find_element函数,显得十分重复繁琐。因此,我们可以对其进行封装。
from selenium.webdriver.common.by import By
class BasePage:
def __init__(self, url):
self.driver = webdriver.Chrome()
self.driver.get(url)
def find_element(self, by: By, value: str):
return self.driver.find_element(by, value)
def close(self):
self.driver.quit()
def __del__(self):
self.close()
3.封装常用操作函数
在实际测试过程中,我们通常需要对网页进行跳转、回退、刷新、输入、点击等操作,并且这些操作是比较基础的。我们可以对这些操作进行封装,以便我们在整个过程中更加高效地使用它们。
下面是一些常用操作的封装:
class BasePage:
def __init__(self, url):
self.driver = webdriver.Chrome()
self.driver.get(url)
def find_element(self, by: By, value: str):
return self.driver.find_element(by, value)
def back(self):
self.driver.back()
def forward(self):
self.driver.forward()
def refresh(self):
self.driver.refresh()
def send_keys(self, by, value, text):
self.driver.find_element(by, value).send_keys(text)
def click(self, by, value):
self.driver.find_element(by, value).click()
def close(self):
self.driver.quit()
def __del__(self):
self.close()
4.封装断言函数
测试过程中不可避免地会用到断言,对结果进行校验。因此,我们需要对断言进行封装。
class BasePage:
def __init__(self, url):
self.driver = webdriver.Chrome()
self.driver.get(url)
def find_element(self, by: By, value: str):
return self.driver.find_element(by, value)
def back(self):
self.driver.back()
def forward(self):
self.driver.forward()
def refresh(self):
self.driver.refresh()
def send_keys(self, by, value, text):
self.driver.find_element(by, value).send_keys(text)
def click(self, by, value):
self.driver.find_element(by, value).click()
def close(self):
self.driver.quit()
def __del__(self):
self.close()
def assert_text(self, by, value, text):
element = self.driver.find_element(by, value)
result_text = element.text
assert result_text == text, f"expected {text}, but get {result_text}"
四、示例说明
示例1:登录网站
我们可以利用上述的封装进行网站的登录操作。
class LoginPage(BasePage):
def login(self, username, password):
user_input = self.find_element(By.ID, "username")
passwd_input = self.find_element(By.ID, "password")
login_btn = self.find_element(By.ID, "login-btn")
self.send_keys(user_input, username)
self.send_keys(passwd_input, password)
self.click(login_btn)
class TestLoginPage:
def test_login(self):
login_pg = LoginPage("http://www.example.com/login")
login_pg.login("user", "pass")
login_pg.assert_text(By.CSS_SELECTOR, "#logged-in-username", "user")
示例2:搜索并校验结果
我们还可以利用上述的封装进行网站的搜索和结果校验操作。
class SearchPage(BasePage):
def search(self, content):
search_input = self.find_element(By.CSS_SELECTOR, "#search-input")
search_input.click()
search_input.send_keys(content)
search_btn = self.find_element(By.CSS_SELECTOR, "#search-btn")
search_btn.click()
def assert_result(self, expected_result):
result = self.find_element(By.CSS_SELECTOR, "#search-result")
assert result.text == expected_result, f"expected {expected_result}, but get {result.text}"
class TestSearchPage:
def test_search(self):
search_pg = SearchPage("http://www.example.com/search")
search_pg.search("hello world")
search_pg.assert_result("Hello World is a phrase")
以上就是基于python+selenium的二次封装的实现攻略,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于python+selenium的二次封装的实现 - Python技术站