接着上篇随笔 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的二次封装(十)的更多相关文章

  1. 《手把手教你》系列基础篇(九十七)-java+ selenium自动化测试-框架设计篇-Selenium方法的二次封装和页面基类(详解教程)

    1.简介 上一篇宏哥介绍了如何设计支持不同浏览器测试,宏哥的方法就是通过来切换配置文件设置的浏览器名称的值,来确定启动什么浏览器进行脚本测试.宏哥将这个叫做浏览器引擎类.这个类负责获取浏览器类型和启动 ...

  2. selenium + python自动化测试unittest框架学习(五)webdriver的二次封装

    因为webdriver的api方法很长,再加上大多数的定位方式是以xpath方式定位,更加让代码看起来超级长,为了使整体的代码看起来整洁,对webdriver进行封装,学习资料来源于虫师的<se ...

  3. webdriver+expected_conditions二次封装

    结合这两种方法对代码做二次封装,可以提升脚本性能 例: #coding:utf-8 #封装元素方法from selenium import webdriverfrom selenium.webdriv ...

  4. 自动化测试框架中关于selenium api的二次封装

    不多说,直接看代码如下: #coding:utf-8 from selenium import webdriver from selenium.webdriver.common.action_chai ...

  5. python mysql redis mongodb selneium requests二次封装为什么大都是使用类的原因,一点见解

    1.python mysql  redis mongodb selneium requests举得这5个库里面的主要被用户使用的东西全都是面向对象的,包括requests.get函数是里面每次都是实例 ...

  6. python+selenium十:selenium的二次封装

    python+selenium十:基于原生selenium的二次封装   from selenium import webdriverfrom selenium.webdriver.support.w ...

  7. python+selenium十:基于原生selenium的二次封装

    from selenium import webdriverfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium ...

  8. Python3 Selenium自动化web测试 ==> 第十一节 WebDriver高级应用 -- 显示等待 + 二次封装

    学习目的: 掌握显示等待 掌握二次封装 正式步骤: step1:显示等待的代码示例 # -*- coding:utf-8 -*- from selenium import webdriver from ...

  9. Python_selenium二次封装selenium的几个方法

    Python_selenium二次封装selenium的几个方法 将常用的几个webdriver方法封装到自己写的一个类中去,此实例中是将"浏览器后退.浏览器前进.打开站点和关闭浏览器&qu ...

随机推荐

  1. 第6章 令牌撤销端点(Token Revocation Endpoint) - IdentityModel 中文文档(v1.0.0)

    OAuth 2.0令牌撤销的客户端库是作为扩展方法提供的HttpClient. 以下代码撤消撤销端点处的访问令牌令牌: var client = new HttpClient(); var resul ...

  2. JSON Web Token入门教程

    目录 一.跨域认证的问题 二.JWT的原理 三.JWT的数据结构 3.1Header 3.2Payload 3.3 Signature 3.4 Base64URL 四.JWT的使用方式 五.JWT的几 ...

  3. GIS之家资源

    分享资源之arcgis软件系列 arcgis10.0(arcgis desktop以及arcgis server):下载 arcgis10.1(arcgis desktop以及arcgis serve ...

  4. Android8.0通知

    android里面经常会使用Notification来显示通知的消息,一般使用NotificationManager来创建通知消息 NotificationManager manger = (Noti ...

  5. Python爬虫 【requests】request for humans

    安装 pip install requests 源码 git clone git://github.com/kennethreitz/requests.git 导入 import requests 发 ...

  6. Linux命令大全汇总,让你工作更有效率!

    基础命令 useradd:用户名 -m:创建新用户 passwd 用户名:为用户设置密码(当创建新用户后,就需要设置密码) whoami:查看当前用户名 exit :退出当前用户,返回之前切换过来的用 ...

  7. Oracle AWRDD报告生成和性能分析

    我写的SQL调优专栏:https://blog.csdn.net/u014427391/article/category/8679315 对于局部的,比如某个页面列表sql,我们可以使用Oracle的 ...

  8. Windows7下安装pyspark

    安装需要如下东西: java jdk-8u181-windows-x64.exe spark spark-2.1.3-bin-hadoop2.7 hadoop(版本要与spark的一致,这里都是had ...

  9. C# 中的Async 和 Await 的用法详解

    众所周知C#提供Async和Await关键字来实现异步编程.在本文中,我们将共同探讨并介绍什么是Async 和 Await,以及如何在C#中使用Async 和 Await. 同样本文的内容也大多是翻译 ...

  10. 轻量级数据库Sqlite的使用

    SqLite是什么? SQLite是一个进程内的库,实现了自给自足的.无服务器的.零配置的.事务性的 SQL 数据库引擎.它是一个零配置的数据库,这意味着与其他数据库一样,您不需要在系统中配置. 就像 ...