selenium-webdriver的二次封装(十)
接着上篇随笔 selenium-配置文件定位元素 ,进行了配置文件设置后,将配置文件运用到定位元素中
思路:拿到定位的 key 和 value 后,对 webdrvier 中定位进行封装,使可以直接运用
主要的8种定位方法:
- find_element_by_id
- find_element_by_name
- find_element_by_xpath
- find_element_by_link_text
- find_element_by_partial_link_text
- find_element_by_tag_name
- find_element_by_class_name
- find_element_by_css_selector
- # conding=utf-8
- from selenium import webdriver
- from auto_learning.config import ReadIni #导入读取的配置文件的py文件,如果不能导入检查是否是包(__init__.py文件存在 )文件
- class FindElement(object):
- def __init__(self,driver):
- self.driver = driver
- def get_Element(self,pageElement,key):
- # 实例化ReadIni
- file_name = '../config/BaiduElement.ini'
- read_ini = ReadIni.ReadIni(file_name)
- key_value = read_ini.get_value(pageElement,key)
- key = key_value.split(':')[0]
- value = key_value.split(':')[1]
- try:
- if key == 'id':
- return self.driver.find_element_by_id(value)
- elif key == 'class':
- return self.driver.find_element_by_class_name(value)
- elif key == 'name':
- return self.driver.find_element_by_name(value)
- elif key == 'tag':
- return self.driver.find_element_by_tag_name(value)
- elif key == 'linkText':
- return self.driver.find_element_by_link_text(value)
- elif key == 'cssSelector':
- return self.driver.find_element_by_css_selector(value)
- elif key == 'xpath':
- return self.driver.find_element_by_xpath(value)
- except:
- return None
由于浏览器有好多种,所以也需要重新定义浏览器的启动
对构造函数进行修改
- def __init__(self,driverName):
- try:
- if driverName == 'chrome':
- self.driver = webdriver.Chrome()
- elif driverName == 'dege':
- self.driver = webdriver.Edge()
- elif driverName == 'firefox':
- self.driver = webdriver.Firefox()
- elif driverName == 'safari':
- self.driver = webdriver.Safari()
- except:
- error_message = "find not " + driverName
- print(error_message)
- self.driver.maximize_window()
- url = 'https://www.baidu.com'
- self.driver.get(url)
在项目中如果用单一浏览器可能会造成堵塞
所以就需要多个浏览器同时跑脚本,不至于一个浏览器的压力太大
- # conding=utf-8
- from selenium import webdriver
- import time
- from auto_learning.config import ReadIni #导入读取的配置文件的py文件,如果不能导入检查是否是包(__init__.py文件存在 )文件
- class FindElement(object):
- def __init__(self,i):
- self.driver = self.get_driver(i)
- time.sleep(3)
- url = 'https://www.baidu.com'
- self.driver.get(url)
- self.driver.maximize_window()
- def get_driver(self,i):
- if i == 0:
- return webdriver.Chrome()
- elif i == 1:
- return webdriver.Edge()
- elif i == 2:
- return webdriver.Firefox()
- elif i == 3:
- return webdriver.Safari()
- def get_Element(self,pageElement,key):
- # 实例化ReadIni
- file_name = '../config/BaiduElement.ini'
- read_ini = ReadIni.ReadIni(file_name)
- key_value = read_ini.get_value(pageElement,key)
- key = key_value.split(':')[0]
- value = key_value.split(':')[1]
- try:
- if key == 'id':
- return self.driver.find_element_by_id(value)
- elif key == 'class':
- return self.driver.find_element_by_class_name(value)
- elif key == 'name':
- return self.driver.find_element_by_name(value)
- elif key == 'tag':
- return self.driver.find_element_by_tag_name(value)
- elif key == 'linkText':
- return self.driver.find_element_by_link_text(value)
- elif key == 'cssSelector':
- return self.driver.find_element_by_css_selector(value)
- elif key == 'xpath':
- return self.driver.find_element_by_xpath(value)
- except:
- return None
- if __name__ == '__main__':
- for i in range(3):
- findElement = FindElement(i)
- input_text = findElement.get_Element('BaiduHomeElement','baidu_search_input')
selenium-webdriver的二次封装(十)的更多相关文章
- 《手把手教你》系列基础篇(九十七)-java+ selenium自动化测试-框架设计篇-Selenium方法的二次封装和页面基类(详解教程)
1.简介 上一篇宏哥介绍了如何设计支持不同浏览器测试,宏哥的方法就是通过来切换配置文件设置的浏览器名称的值,来确定启动什么浏览器进行脚本测试.宏哥将这个叫做浏览器引擎类.这个类负责获取浏览器类型和启动 ...
- selenium + python自动化测试unittest框架学习(五)webdriver的二次封装
因为webdriver的api方法很长,再加上大多数的定位方式是以xpath方式定位,更加让代码看起来超级长,为了使整体的代码看起来整洁,对webdriver进行封装,学习资料来源于虫师的<se ...
- webdriver+expected_conditions二次封装
结合这两种方法对代码做二次封装,可以提升脚本性能 例: #coding:utf-8 #封装元素方法from selenium import webdriverfrom selenium.webdriv ...
- 自动化测试框架中关于selenium api的二次封装
不多说,直接看代码如下: #coding:utf-8 from selenium import webdriver from selenium.webdriver.common.action_chai ...
- python mysql redis mongodb selneium requests二次封装为什么大都是使用类的原因,一点见解
1.python mysql redis mongodb selneium requests举得这5个库里面的主要被用户使用的东西全都是面向对象的,包括requests.get函数是里面每次都是实例 ...
- python+selenium十:selenium的二次封装
python+selenium十:基于原生selenium的二次封装 from selenium import webdriverfrom selenium.webdriver.support.w ...
- python+selenium十:基于原生selenium的二次封装
from selenium import webdriverfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium ...
- Python3 Selenium自动化web测试 ==> 第十一节 WebDriver高级应用 -- 显示等待 + 二次封装
学习目的: 掌握显示等待 掌握二次封装 正式步骤: step1:显示等待的代码示例 # -*- coding:utf-8 -*- from selenium import webdriver from ...
- Python_selenium二次封装selenium的几个方法
Python_selenium二次封装selenium的几个方法 将常用的几个webdriver方法封装到自己写的一个类中去,此实例中是将"浏览器后退.浏览器前进.打开站点和关闭浏览器&qu ...
随机推荐
- [ArcGIS API for JavaScript 4.8] Sample Code-Get Started-popups简介
[官方文档:https://developers.arcgis.com/javascript/latest/sample-code/intro-popup/index.html] 一.Intro to ...
- Prncnfg.vbs参数详解
语法: Cscript Prncnfg {-g | -t | -x | -?} [-S <ServerName>] [-P <PrinterName>] [-z <New ...
- win10彻底禁用自动更新,win10怎样彻底关闭自动更新,永久关闭win10自动更新,win10更新助手
首先,请广大win10受害者原谅小菜用一个如此长的标题来吸引你们,为了尽最大努力帮助那些饱受win10自动更新折磨的朋友们,小菜不得已出此下策,望见谅! windows 10是一个神奇的操作系统,当你 ...
- 深入理解 call,apply 和 bind
在JavaScript 中,call.apply 和 bind 是 Function 对象自带的三个方法,这三个方法的主要作用是改变函数中的 this 指向,从而可以达到`接花移木`的效果.本文将对这 ...
- ASP.NET Core 共享第三方依赖库部署的Bug(*.deps.json on 2.2.0 or 4.6.0 版本)
背景: I try to put the Microsoft.*.dll and System.*.dll togather to a new folder.以便把(第三方或)系统的和应用的dll分开 ...
- Open ID Connect(OIDC)在 ASP.NET Core中的应用
我们在<ASP.NET Core项目实战的课程>第一章里面给identity server4做了一个全面的介绍和示例的练习 ,这篇文章是根据大家对OIDC遇到的一些常见问题整理得出. 本文 ...
- 再谈AbstractQueuedSynchronizer2:共享模式与基于Condition的等待/通知机制实现
共享模式acquire实现流程 上文我们讲解了AbstractQueuedSynchronizer独占模式的acquire实现流程,本文趁热打铁继续看一下AbstractQueuedSynchroni ...
- 实现iframe高度自适应
iframe高度自适应使用场景是类似于微博,新闻等点击加载更多这种功能实现,要求iframe的高度能够跟随内容的变化而变化. 父html文件,也就是引用ifram的文件 src="blog/ ...
- 关于Python深浅拷贝
拷贝: 说明:原则上就是把数据分离出来,复制其数据,并以后修改互不影响. 何来深浅拷贝的说法? 深浅拷贝的“深”和“浅”可以理解为从变量到硬盘上的物理存储介质之间的层次的多少. 下面用一个示例来解释浅 ...
- 死磕 java集合之ConcurrentHashMap源码分析(二)——扩容
本章接着上一章,链接直达请点我. 初始化桶数组 第一次放元素时,初始化桶数组. private final Node<K,V>[] initTable() { Node<K,V> ...