接着上篇随笔 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. SpringBoot启动原理分析

    用了差不多两年的SpringBoot了,可以说对SpringBoot已经很熟了,但是仔细一想SpringBoot的启动流程,还是让自己有点懵逼,不得不说是自己工作和学习的失误,所以以此文对Spring ...

  2. 给WEB初学者的一些有效率的建议

    因为IT互联网发展的非常迅速,而web前端这块很火,目前工资水平给的很高,在市场上也是非常的稀缺人才,现在各个行业转行做web前端的很多,今天给大家一些建议,希望新手少走点弯路吧! 建议一:有一个比较 ...

  3. Git默认用户名和密码设置

    使用git的时候每次都需要输入密码,操作过程十分繁琐,非常不人性化,增加开发工作时间,也特别烦恼. 今天我们就来说说这个问题: 首先,如果我们git clone的下载代码的时候是连接的https:// ...

  4. 有关Windows10中诊断和反馈隐私设置

    当你使用 Windows 时,我们将收集诊断信息,为了确保能收到你(我们的客户)的反馈,我们为你提供了多种方式,以便你可以随时发送反馈,也可以在某个特定的时间(例如当 Windows 10 向你提出关 ...

  5. 白话kubernetes的十万个为什么(持续更新中...) - kubernetes

    Kubernetes简称? 答:k8s或kube. Kubernetes是什么? 答:由Google开发的一个强大的平台,可以在集群环境中管理容器化应用程序.本质上是一种特殊的数据库,里面存储的是能够 ...

  6. MySQL 多表查询 学习与练习

    一.介绍 首先先准备表 员工表和部门表 #建表 create table department( id int, name varchar(20) ); create table employee1( ...

  7. GROUP BY你都不会!ROLLUP,CUBE,GROUPPING详解

    Group By Group By 谁不会啊?这不是最简单的吗?越是简单的东西,我们越会忽略掉他,因为我们不愿意再去深入了解它. 1 小时 SQL 极速入门(一) 1 小时 SQL 极速入门(二) 1 ...

  8. 小乌龟git

    一.概念 分布式版本控制系统.诞生于Linux社区,有兴趣可以去了解下git的前世今生. 与集中式版本控制有明显区别.集中式:集中管理的服务器,保存所有的修订版本,协同工作的人通过客户端连接服务器,取 ...

  9. 利用SQL Profiler 追踪数据库操作

    SQL Server 事件探查器 是一个界面,用于创建和管理跟踪并分析和重播跟踪结果. 这些事件保存在一个跟踪文件中,稍后试图诊断问题时,可以对该文件进行分析或用它来重播一系列特定的步骤. SQL S ...

  10. ASP.NET Core Web API 版本控制

    在nuget.org上,您可以找到  Microsoft.AspNetCore.Mvc.Versioning包,它提供了有关如何对Web API端点进行版本化的更多选项.这个包的好处是允许你直接在控制 ...