import os
from framework.logger import *
from selenium import webdriver
from selenium.webdriver.common.by import By
logger = Logger(logger='base_page').get_log()
class BasePage:
driver = None
def __init__(self, driver):
self.driver = driver
def back(self):
self.driver.back()
logger.info("Click back on current page.")
def forward(self):
self.driver.forward()
logger.info("Click forward on current page.")
def quit_browser(self):
self.driver.quit()
def wait(self, seconds):
self.driver.implicitly_wait(seconds)
logger.info("Quit browser.")
def close(self):
try:
self.driver.close()
logger.info("Closing and quit the browser.")
except Exception as e:
logger.info('Fail to quit the browser')
def get_windows_img(self):
file_path = os.path.dirname(os.getcwd()) + '\\Screenshots\\'
rq = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
screen_name = file_path + rq + '.png'
try:
self.driver.get_screenshot_as_file(screen_name)
logger.info('开始截图并保存')
except Exception as e:
logger.error('截图异常')
def find_element(self, selector):
element = ''
if '=>' not in selector:
return
select_by = selector.split('=>')[0]
select_value = selector.split('=>')[1]
if select_by == 'id':
try:
element = self.driver.find_element(By.ID, select_value)
logger.info(f'had find element:{element.text}, by:{select_by}, value:{select_value}')
except Exception as e:
logger.error(f"NoSuchElementException:{e}")
self.get_windows_img()
elif select_by == 'name':
try:
element = self.driver.find_element(By.NAME, select_value)
logger.info(f'had find element:{element.text}, by:{select_by}, value:{select_value}')
except Exception as e:
logger.error(f"NoSuchElementException:{e}")
self.get_windows_img()
elif select_by == 'class_name':
try:
element = self.driver.find_element(By.CLASS_NAME, select_value)
logger.info(f'had find element:{element.text}, by:{select_by}, value:{select_value}')
except Exception as e:
logger.error(f"NoSuchElementException:{e}")
self.get_windows_img()
elif select_by == 'link_text':
try:
element = self.driver.find_element(By.LINK_TEXT, select_value)
logger.info(f'had find element:{element.text}, by:{select_by}, value:{select_value}')
except Exception as e:
logger.error(f"NoSuchElementException:{e}")
self.get_windows_img()
elif select_by == 'partial_link_text':
try:
element = self.driver.find_element(By.PARTIAL_LINK_TEXT, select_value)
logger.info(f'had find element:{element.text}, by:{select_by}, value:{select_value}')
except Exception as e:
logger.error(f"NoSuchElementException:{e}")
self.get_windows_img()
elif select_by == 'tag_name':
try:
element = self.driver.find_element(By.TAG_NAME, select_value)
logger.info(f'had find element:{element.text}, by:{select_by}, value:{select_value}')
except Exception as e:
logger.error(f"NoSuchElementException:{e}")
self.get_windows_img()
elif select_by == 'css_selector':
try:
element = self.driver.find_element(By.CSS_SELECTOR, select_value)
logger.info(f'had find element:{element.text}, by:{select_by}, value:{select_value}')
except Exception as e:
logger.error(f"NoSuchElementException:{e}")
self.get_windows_img()
elif select_by == 'xpath':
try:
element = self.driver.find_element(By.XPATH, select_value)
logger.info(f'had find element:{element.text}, by:{select_by}, value:{select_value}')
except Exception as e:
logger.error(f"NoSuchElementException:{e}")
self.get_windows_img()
else:
raise NameError("Please enter a valid type of targeting elements.")
return element
def type(self, selector, text):
element = self.find_element(selector)
element.clear()
try:
element.send_keys(text)
logger.info(f"Had type {text} in inputBox")
except NameError as e:
logger.error(f"Failed to type in input box with {e}")
self.get_windows_img()
def clear(self, selector):
element = self.find_element(selector)
try:
element.clear()
logger.info("Clear text in input box before typing.")
except NameError as e:
logger.error(f"Failed to clear in input box with {e}")
self.get_windows_img()
def click(self, selector):
element = self.find_element(selector)
try:
element.click()
logger.info(f"The element {element.text} was clicked.")
except NameError as e:
logger.error(f"Failed to click the element with {e}")
def get_page_title(self):
logger.info(f"Current page title is {self.driver.title}")
return self.driver.title
@staticmethod
def sleep(seconds):
time.sleep(seconds)
logger.info(f"Sleep for {seconds} seconds")
if __name__ == '__main__':
driver = webdriver.Chrome()
BasePage(driver).get_windows_img()
python+selenium自动化测试框架第一版
需积分: 0 54 浏览量
更新于2024-05-09
收藏 30.88MB ZIP 举报
Python+Selenium自动化测试框架是现代软件测试领域中广泛采用的技术栈。Selenium 是一个开源的Web应用程序测试框架,它允许开发者使用多种编程语言(包括Python)来编写测试脚本,模拟用户与网页的交互,从而进行功能性和回归性的自动化测试。
Python作为Selenium的常用绑定语言,具有语法简洁、易学易用的特点,使得测试脚本的编写变得非常直观。Python+Selenium组合可以实现的功能包括但不限于:
1. **元素定位**:Selenium提供了多种方法来定位网页上的元素,如id、name、class name、CSS选择器、XPath等。这使得我们可以精确地找到页面上的任何元素并执行操作,如点击、输入文本等。
2. **事件模拟**:Selenium可以模拟用户的各种交互行为,例如点击按钮、填写表单、选择下拉菜单项、滚动页面、拖放元素等,这些操作在实际的用户场景中很常见。
3. **页面对象模式**:这是一种最佳实践,将页面的结构和行为封装到单独的类中,提高了代码的可维护性和可读性。通过定义页面元素和它们的操作,测试代码更加模块化。
4. **等待策略**:在自动化测试中,网页加载和元素出现的时机可能不稳定,Selenium提供显式等待和隐式等待,以确保在执行操作之前元素已经就绪。
5. **断言验证**:测试完成后,需要验证预期的结果是否符合预期。Selenium结合Python的assert语句,可以对页面状态、元素属性等内容进行验证。
6. **测试套件与测试框架集成**:Selenium可以与Python的unittest、pytest等测试框架集成,构建测试套件,进行批量测试和生成测试报告。
7. **分布式测试**:通过Selenium Grid,可以在多台机器上并行运行测试,提高测试效率,尤其适用于大型项目的持续集成环境。
8. **浏览器兼容性**:Selenium支持多种浏览器,如Chrome、Firefox、IE等,可以进行跨浏览器的测试,确保应用在不同环境下表现一致。
9. **日志记录**:Selenium可以记录测试执行过程中的详细信息,有助于调试和问题排查。
10. **第三方库扩展**:如.webdriver_manager库可以帮助自动管理浏览器驱动,seleniumbase提供了更高级别的API,简化测试脚本编写。
学习Python+Selenium自动化测试框架,不仅需要掌握Python基础知识,还要熟悉HTML和CSS,理解Web页面的工作原理。此外,对于测试思维、敏捷开发流程以及版本控制工具如Git的使用也是必备技能。通过不断的实践和项目经验积累,可以逐渐成为一名精通自动化测试的专业人士。希望这个分享对大家的学习有所帮助,如果觉得有帮助,别忘了点赞支持哦!

优土爱暴风
- 粉丝: 133
最新资源
- 成为解决方案架构师的必修课
- 【ppt模板】大数据IT互联网科技.pptx
- 计算机网络实验课程的探索与改革.docx
- 互联网+背景下初中英语信息化教学的策略研究.docx
- 应用型本科高校《计算机网络》课程教学改革研究.docx
- 我国互联网金融的问题及对策研究.docx
- OpenStack技术架构简介.pptx
- 三级网络技术模拟试题25957.doc
- 全国计算机应用基础年月高等教育自学测验试题与答案.doc
- 基于单片机的电子密码锁的研究设计.docx
- 互联网+税务的现状及对策.docx
- 基于AT89S51单片机的数字温度计的设计.doc
- 核心素养理念下基于大数据支撑的高中生物精准教学.docx
- 单片机实现电阻炉温度控制接口电路设计方案.doc
- 试论智能化技术在电气工程自动化中的运用.docx
- 实验二:存储器的分配与回收算法实现.doc