UI自动化-selenium-api封装pyse框架
# coding=utf-8
import time
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select class Pyse(object):
'''
Pyse framework for the main class, the original
selenium provided by the method of the two packaging,
making it easier to use.
''' def __init__(self, browser='chrome'):
'''
Run class initialization method, the default is proper
to drive the Firefox browser. Of course, you can also
pass parameter for other browser, Chrome browser for the "Chrome",
the Internet Explorer browser for "internet explorer" or "ie".
'''
# if browser == "firefox" or browser == "ff":
# driver = webdriver.Firefox()
# elif browser == "chrome":
# option = webdriver.ChromeOptions()
# option.add_argument("--start-maximized")
# driver = webdriver.Chrome(chrome_options=option)
# elif browser == "internet explorer" or browser == "ie":
# driver = webdriver.Ie()
# elif browser == "opera":
# driver = webdriver.Opera()
# elif browser == "phantomjs":
# driver = webdriver.PhantomJS()
# elif browser == 'edge':
# driver = webdriver.Edge()
# try:
# self.driver = driver
# except Exception:
# raise NameError(
# "Not found %s browser,You can enter 'ie', 'ff', 'opera', 'phantomjs', 'edge' or 'chrome'." % browser) if browser.lower() == 'chrome':
option = webdriver.ChromeOptions()
option.add_argument('--start-maximized')
driver = webdriver.Chrome(chrome_options=option)
elif browser.lower() == 'firefox' or browser.lower() == 'ff':
driver = webdriver.Firefox()
elif browser.lower() == 'ie' or browser.lower() == 'internet explorer':
driver = webdriver.Ie()
elif browser.lower() == 'opera':
driver = webdriver.Opera()
elif browser.lower() == 'phantomjs':
driver = webdriver.PhantomJS
elif browser.lower() == 'edge':
driver = webdriver.Edge()
try:
self.driver = driver
except Exception:
raise NameError(
"Not found %s browser,You can enter 'ie', 'ff', 'opera', 'phantomjs', 'edge' or 'chrome'." % browser) def element_wait(self, css, secs=5):
'''
Waiting for an element to display. Usage:
driver.element_wait("css=>#el",10)
'''
if "=>" not in css:
raise NameError("Positioning syntax errors, lack of '=>'.") by = css.split("=>")[0]
value = css.split("=>")[1] if by == "id":
WebDriverWait(self.driver, secs, 1).until(EC.presence_of_element_located((By.ID, value)))
elif by == "name":
WebDriverWait(self.driver, secs, 1).until(EC.presence_of_element_located((By.NAME, value)))
elif by == "class":
WebDriverWait(self.driver, secs, 1).until(EC.presence_of_element_located((By.CLASS_NAME, value)))
elif by == "link_text":
WebDriverWait(self.driver, secs, 1).until(EC.presence_of_element_located((By.LINK_TEXT, value)))
elif by == "xpath":
WebDriverWait(self.driver, secs, 1).until(EC.presence_of_element_located((By.XPATH, value)))
elif by == "css":
WebDriverWait(self.driver, secs, 1).until(EC.presence_of_element_located((By.CSS_SELECTOR, value)))
else:
raise NameError(
"Please enter the correct targeting elements,'id','name','class','link_text','xpath','css'.") def get_element(self, css):
'''
Judge element positioning way, and returns the element.
'''
if "=>" not in css:
raise NameError("Positioning syntax errors, lack of '=>'.") by = css.split("=>")[0]
value = css.split("=>")[1] if by == "id":
element = self.driver.find_element_by_id(value)
elif by == "name":
element = self.driver.find_element_by_name(value)
elif by == "class":
element = self.driver.find_element_by_class_name(value)
elif by == "link_text":
element = self.driver.find_element_by_link_text(value)
elif by == "xpath":
element = self.driver.find_element_by_xpath(value)
elif by == "css":
element = self.driver.find_element_by_css_selector(value)
else:
raise NameError(
"Please enter the correct targeting elements,'id','name','class','link_text','xpath','css'.")
return element def get(self, url):
'''
open 请求url. Usage:
driver.open("https://www.baidu.com")
'''
self.driver.get(url) def max_window(self):
'''
Set browser window maximized. Usage:
driver.max_window()
'''
self.driver.maximize_window() def set_window(self, wide, high):
'''
Set browser window wide and high. Usage:
driver.set_window(wide,high)
'''
self.driver.set_window_size(wide, high) def type(self, css, text):
'''
Operation input box 发送value Usage:
driver.type("css=>#el","selenium")
'''
self.element_wait(css)
el = self.get_element(css)
el.send_keys(text) def clear(self, css):
'''
Clear the contents of the input box. Usage:
driver.clear("css=>#el")
'''
self.element_wait(css)
el = self.get_element(css)
el.clear() def click(self, css):
'''
It can click any text / image can be clicked
Connection, check box, radio buttons, and even drop-down box etc.. Usage:
driver.click("css=>#el")
'''
self.element_wait(css)
el = self.get_element(css)
el.click() def right_click(self, css):
'''
Right click element. Usage:
driver.right_click("css=>#el")
'''
self.element_wait(css)
el = self.get_element(css)
ActionChains(self.driver).context_click(el).perform() def move_to_element(self, css):
'''
Mouse over the element. Usage:
driver.move_to_element("css=>#el")
'''
self.element_wait(css)
el = self.get_element(css)
ActionChains(self.driver).move_to_element(el).perform() def double_click(self, css):
'''
Double click element. Usage:
driver.double_click("css=>#el")
'''
self.element_wait(css)
el = self.get_element(css)
ActionChains(self.driver).double_click(el).perform() def drag_and_drop(self, el_css, ta_css):
'''
Drags an element a certain distance and then drops it. Usage:
driver.drag_and_drop("css=>#el","css=>#ta")
'''
self.element_wait(el_css)
element = self.get_element(el_css)
self.element_wait(ta_css)
target = self.get_element(ta_css)
ActionChains(self.driver).drag_and_drop(element, target).perform() def click_text(self, text):
'''
Click the element by the link text Usage:
driver.click_text("新闻")
'''
self.driver.find_element_by_partial_link_text(text).click() def close(self):
'''
Simulates the user clicking the "close" button in the titlebar of a popup
window or tab. Usage:
driver.close()
'''
self.driver.close() def quit(self):
'''
Quit the driver and close all the windows. Usage:
driver.quit()
'''
self.driver.quit() def submit(self, css):
'''
Submit the specified form. Usage:
driver.submit("css=>#el")
'''
self.element_wait(css)
el = self.get_element(css)
el.submit() def F5(self):
'''
Refresh the current page. Usage:
driver.F5()
'''
self.driver.refresh() def back(self):
self.driver.back() def go_on(self):
self.driver.forward() def js(self, script):
'''
Execute JavaScript scripts. Usage:
driver.js("window.scrollTo(200,1000);")
'''
self.driver.execute_script(script) def get_attribute(self, css, attribute):
'''
Gets the value of an element attribute. Usage:
driver.get_attribute("css=>#el","type")
'''
el = self.get_element(css)
return el.get_attribute(attribute) def get_text(self, css):
'''
Get element text information. Usage:
driver.get_text("css=>#el")
'''
self.element_wait(css)
el = self.get_element(css)
return el.text def get_display(self, css):
'''
Gets the element to display,The return result is true or false. Usage:
driver.get_display("css=>#el")
'''
self.element_wait(css)
el = self.get_element(css)
return el.is_displayed() def get_title(self):
'''
Get window title. Usage:
driver.get_title()
'''
return self.driver.title def get_url(self):
'''
Get the URL address of the current page. Usage:
driver.get_url()
'''
return self.driver.current_url def get_windows_img(self, file_path):
'''
Get the current window screenshot. Usage:
driver.get_windows_img()
'''
self.driver.get_screenshot_as_file(file_path) def wait(self, secs):
'''
Implicitly wait.All elements on the page. Usage:
driver.wait(10)
'''
self.driver.implicitly_wait(secs) def accept_alert(self):
'''
Accept warning box. Usage:
driver.accept_alert()
'''
self.driver.switch_to.alert.accept() def dismiss_alert(self):
'''
Dismisses the alert available. Usage:
driver.dismiss_alert()
'''
self.driver.switch_to.alert.dismiss() def switch_to_frame(self, css):
'''
Switch to the specified frame. Usage:
driver.switch_to_frame("css=>#el")
'''
self.element_wait(css)
iframe_el = self.get_element(css)
self.driver.switch_to.frame(iframe_el) def parent_iframe(self):
self.driver.switch_to.parent_frame() def switch_to_frame_out(self):
'''
Returns the current form machine form at the next higher level.
Corresponding relationship with switch_to_frame () method. Usage:跳转到最外层的页面
driver.switch_to_frame_out()
'''
self.driver.switch_to.default_content() def open_new_window(self, css):
'''
Open the new window and switch the handle to the newly opened window. Usage:
driver.open_new_window()
'''
original_windows = self.driver.current_window_handle
el = self.get_element(css)
el.click()
all_handles = self.driver.window_handles
for handle in all_handles:
if handle != original_windows:
self.driver.switch_to.window(handle) # def _save_png(self, name):
# self.get_windows_img(name) def wait_and_save_exception(self, css, name):
try:
self.element_wait(css, secs=5)
return True
except Exception as e:
from lib.core.path import PICTUREPATH
self.get_windows_img(PICTUREPATH + name + '.jpg')
return False def wait_and_exception(self, css):
try:
self.element_wait(css, secs=10)
return True
except Exception as e:
return False def select_by_value(self, css, value):
self.element_wait(css)
el = self.get_element(css)
Select(el).select_by_value(value) if __name__ == '__main__':
pyse = Pyse('Chrome')
pyse.get("http://")
pyse.get_element('css=>#i1').send_keys(111111)
time.sleep(3)
pyse.quit()
UI自动化-selenium-api封装pyse框架的更多相关文章
- UI自动化selenium
1.什么是UI自动化?模拟人用代码的方式去操作页面2.为什么要做UI自动化?后期迭代的时候,老功能比较多,人工维护成本较大,重复性工作较多,这个时候就考虑因为UI自动化3.什么时候做UI自动化?项目稳 ...
- UI自动化(selenium+python)之元素定位的三种等待方式
前言 在UI自动化过程中,常遇到元素未找到,代码报错的情况.这种情况下,需要用等待wait. 在selenium中可以用到三种等待方式即sleep,implicitly_wait,WebDriverW ...
- UI自动化学习笔记- UnitTest单元测试框架详解
一.UnitTest基本使用 1. UnitTest框架 1.1 什么是框架 说明: 框架英文单词frame 为解决一类事情的功能集合 1.2什么是UnitTest框架 概念:UnitTest是pyt ...
- UI自动化(selenium+python)之浏览器驱动chromedriver安装和配置
一.安装selenium 前提是已安装Python,python安装 自行百度,这里不概述 安装好python后,cmd打开终端窗口-->pip命令安装 :pip install seleniu ...
- UI自动化填写问卷(selenium)+定时任务(懒人必备)
1.自动填报 UI自动化 selenium 开发程序动机:天天有人催着填写问卷,弄的头大.主要还是懒的每天一个个去填写内容. 开发总时长:2个小时:学习+开发+修改 遇到的小问题: 在自动化填写地图的 ...
- Airtest 网易 UI 自动化工具 Airtest 浅用记录
一 使用目的 该工具主要是面向游戏UI测试基于图像识别,如游戏框架unity,Cocos-js以及网易内部的游戏框架同时也支持原生Android App 的基于元素识别的UI自动化测试.本文主要使用目 ...
- 网易 UI 自动化工具 Airtest 浅用记录
一 使用目的 该工具主要是面向游戏UI测试基于图像识别,如游戏框架unity,Cocos-js以及网易内部的游戏框架 同时也支持原生Android App 的基于元素识别的UI自动化测试. 本文主要使 ...
- poium测试库之JavaScript API封装原理
poium一直我在维护的一个开源项目,它的定位是以极简的方式在自动化项目中Page Objects设计模式.我在之前的文章中也有介绍. 本篇文章主要介绍一个JavaScript元素操作的封装原理. 为 ...
- selenium(12)-web UI自动化项目实战(PO模式,代码封装)
web UI自动化项目实战-项目 项目使用禅道,所以你需要搭建1个禅道,搭建禅道的方法和步骤见 https://www.cnblogs.com/xinhua19/p/13151296.html 搭建U ...
随机推荐
- 百度网盘,FTP上传异常、上传失败的解决办法
若你的宽带上传上限速度为50KB,那么将百度网盘或FTP的上行速度调为50KB以下即可,就不会出现网络异常的情况了.
- 双向BFS统计
Hdu1195 两个四位密码 问你最少多少步能到达 /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof ...
- ffmpeg函数01__swr_convert()
swr_convert() 针对每一帧音频的处理.把一帧帧的音频作相应的重采样 int swr_convert(struct SwrContext *s, uint8_t **out, int out ...
- XXL-JOB原理--任务调度中心任务管理
XXL-JOB原理--任务调度中心任务管理 https://blog.csdn.net/qq924862077/article/details/82713758
- 使用IDEA搭建一个 Spring + Spring MVC + Mybatis 的Web项目 ( 零配置文件 )
前言: 除了mybatis 不是零配置,有些还是有xml的配置文件在里面的. 注解是Spring的一个构建的一个重要手段,减少写配置文件,下面解释一下一些要用到的注解: @Configuration ...
- C语言的函数声明,定义,调用以及exit退出
#include <stdio.h> #include <stdlib.h> void singing(); int main() { singing(); system(&q ...
- MySQL--关于MySQL的那些练习题
之前联系了一些MySQL的查询相关知识,现在补充作为一个记录,免得自己忘记. 致谢博主:https://blog.csdn.net/dehu_zhou/article/details/52881587 ...
- LAMP 搭建,wordpress.xcache,powerdns及poweradmin
一,概念 CGI: CGI全称是通用网关接口(Common Gateway Interface),是外部应用程序与与服务器之间的接口标准,是在CGI程序和web服务器之间传递信息的规程 CGI是一段程 ...
- JAVA记录 Spring 两大特性
1.IOC控制反转 Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象 ...
- DOM修改
㈠DOM标准 核心DOM: HTML DOM ...