# 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框架的更多相关文章

  1. UI自动化selenium

    1.什么是UI自动化?模拟人用代码的方式去操作页面2.为什么要做UI自动化?后期迭代的时候,老功能比较多,人工维护成本较大,重复性工作较多,这个时候就考虑因为UI自动化3.什么时候做UI自动化?项目稳 ...

  2. UI自动化(selenium+python)之元素定位的三种等待方式

    前言 在UI自动化过程中,常遇到元素未找到,代码报错的情况.这种情况下,需要用等待wait. 在selenium中可以用到三种等待方式即sleep,implicitly_wait,WebDriverW ...

  3. UI自动化学习笔记- UnitTest单元测试框架详解

    一.UnitTest基本使用 1. UnitTest框架 1.1 什么是框架 说明: 框架英文单词frame 为解决一类事情的功能集合 1.2什么是UnitTest框架 概念:UnitTest是pyt ...

  4. UI自动化(selenium+python)之浏览器驱动chromedriver安装和配置

    一.安装selenium 前提是已安装Python,python安装 自行百度,这里不概述 安装好python后,cmd打开终端窗口-->pip命令安装 :pip install seleniu ...

  5. UI自动化填写问卷(selenium)+定时任务(懒人必备)

    1.自动填报 UI自动化 selenium 开发程序动机:天天有人催着填写问卷,弄的头大.主要还是懒的每天一个个去填写内容. 开发总时长:2个小时:学习+开发+修改 遇到的小问题: 在自动化填写地图的 ...

  6. Airtest 网易 UI 自动化工具 Airtest 浅用记录

    一 使用目的 该工具主要是面向游戏UI测试基于图像识别,如游戏框架unity,Cocos-js以及网易内部的游戏框架同时也支持原生Android App 的基于元素识别的UI自动化测试.本文主要使用目 ...

  7. 网易 UI 自动化工具 Airtest 浅用记录

    一 使用目的 该工具主要是面向游戏UI测试基于图像识别,如游戏框架unity,Cocos-js以及网易内部的游戏框架 同时也支持原生Android App 的基于元素识别的UI自动化测试. 本文主要使 ...

  8. poium测试库之JavaScript API封装原理

    poium一直我在维护的一个开源项目,它的定位是以极简的方式在自动化项目中Page Objects设计模式.我在之前的文章中也有介绍. 本篇文章主要介绍一个JavaScript元素操作的封装原理. 为 ...

  9. selenium(12)-web UI自动化项目实战(PO模式,代码封装)

    web UI自动化项目实战-项目 项目使用禅道,所以你需要搭建1个禅道,搭建禅道的方法和步骤见 https://www.cnblogs.com/xinhua19/p/13151296.html 搭建U ...

随机推荐

  1. 如何使用sqlalchemy获取表的主键、以及每一个字段名和对应类型

    使用sqlalchemy获取到的结果只包含数据,不包含字段,那么我们如何获取到对应字段和其属性呢?以及如何获取某张表的主键呢? # -*- coding:utf-8 -*- # @Author: Wa ...

  2. RaspberryPi交叉编译环境配置-Ubuntu & wiringPi & Qt

    1.配置RaspberryPi交叉编译环境: 在开发RaspberryPi Zero的过程中,由于Zero板卡的CPU的处理性能比较弱,因此其编译的性能比较弱,需要将代码在PC电脑上交叉编译完成之后再 ...

  3. NB-IOT双工模式

    半双工(Half Duplex)数据传输指数据可以在一个信号载体的两个方向上传输,但是不能同时传输.例如,在一个局域网上使用具有半双工传输的技术,一个工作站可以在线上发送数据,然后立即在线上接收数据, ...

  4. pamamiko的安装

    pamiko的安装 Paramiko的安装依赖第三方的crypto,ecdsa,及python开发包的python-devel的支持,源码包安装如下 安装 安装paramiko有两个先决条件,pyth ...

  5. plsql执行sql

    第一步找执行的命令:: plsql ::::::::::File----->>>>Change Windows to ------->>>Command Wi ...

  6. Linux 权限和目录更改、移除、更换目录、列出目录内容、使用通配符、移动、重命名

    12 chgrp :改变档案.目录所属群组          chgrp -R dirname/filename   chown :改变档案/目录拥有者              chown -R 账 ...

  7. CISCO SMARTnet服务和SMB服务技术支持

    点击官网:SMB Support Assistant技术支持服务 点击官网:思科SMARTnet快速维护及快速维护现场服务 一.SMARTnet服务 1.1 标准SMARTnet 服务级别:5*8*N ...

  8. java8学习之Stream实例剖析

    继续操练Stream,直接上代码: 而咱们要返回ArrayList,显示可以用构造引用来传递到里面,因为它刚好符合Supplier函数式接口的特性:不接收参数返回一个值,所以: 接下来试着将Strea ...

  9. JS 深拷贝/合并

    var mix = function(r, s, ov) { if (!s || !r) return r; if (ov === undefined) ov = true; for (var p i ...

  10. [uboot] (番外篇)global_data介绍(转)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/ooonebook/article/det ...