接着上篇随笔 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
  1. # conding=utf-8
  2.  
  3. from selenium import webdriver
  4. from auto_learning.config import ReadIni #导入读取的配置文件的py文件,如果不能导入检查是否是包(__init__.py文件存在 )文件
  5.  
  6. class FindElement(object):
  7. def __init__(self,driver):
  8. self.driver = driver
  9.  
  10. def get_Element(self,pageElement,key):
  11. # 实例化ReadIni
  12. file_name = '../config/BaiduElement.ini'
  13. read_ini = ReadIni.ReadIni(file_name)
  14. key_value = read_ini.get_value(pageElement,key)
  15. key = key_value.split(':')[0]
  16. value = key_value.split(':')[1]
  17.  
  18. try:
  19. if key == 'id':
  20. return self.driver.find_element_by_id(value)
  21. elif key == 'class':
  22. return self.driver.find_element_by_class_name(value)
  23. elif key == 'name':
  24. return self.driver.find_element_by_name(value)
  25. elif key == 'tag':
  26. return self.driver.find_element_by_tag_name(value)
  27. elif key == 'linkText':
  28. return self.driver.find_element_by_link_text(value)
  29. elif key == 'cssSelector':
  30. return self.driver.find_element_by_css_selector(value)
  31. elif key == 'xpath':
  32. return self.driver.find_element_by_xpath(value)
  33.  
  34. except:
  35. return None

由于浏览器有好多种,所以也需要重新定义浏览器的启动

对构造函数进行修改

  1. def __init__(self,driverName):
  2. try:
  3. if driverName == 'chrome':
  4. self.driver = webdriver.Chrome()
  5. elif driverName == 'dege':
  6. self.driver = webdriver.Edge()
  7. elif driverName == 'firefox':
  8. self.driver = webdriver.Firefox()
  9. elif driverName == 'safari':
  10. self.driver = webdriver.Safari()
  11.  
  12. except:
  13. error_message = "find not " + driverName
  14. print(error_message)
  15.  
  16. self.driver.maximize_window()
  17. url = 'https://www.baidu.com'
  18. self.driver.get(url)

在项目中如果用单一浏览器可能会造成堵塞

所以就需要多个浏览器同时跑脚本,不至于一个浏览器的压力太大

  1. # conding=utf-8
  2.  
  3. from selenium import webdriver
  4. import time
  5. from auto_learning.config import ReadIni #导入读取的配置文件的py文件,如果不能导入检查是否是包(__init__.py文件存在 )文件
  6.  
  7. class FindElement(object):
  8. def __init__(self,i):
  9. self.driver = self.get_driver(i)
  10. time.sleep(3)
  11. url = 'https://www.baidu.com'
  12. self.driver.get(url)
  13. self.driver.maximize_window()
  14.  
  15. def get_driver(self,i):
  16. if i == 0:
  17. return webdriver.Chrome()
  18. elif i == 1:
  19. return webdriver.Edge()
  20. elif i == 2:
  21. return webdriver.Firefox()
  22. elif i == 3:
  23. return webdriver.Safari()
  24.  
  25. def get_Element(self,pageElement,key):
  26. # 实例化ReadIni
  27. file_name = '../config/BaiduElement.ini'
  28. read_ini = ReadIni.ReadIni(file_name)
  29. key_value = read_ini.get_value(pageElement,key)
  30. key = key_value.split(':')[0]
  31. value = key_value.split(':')[1]
  32.  
  33. try:
  34. if key == 'id':
  35. return self.driver.find_element_by_id(value)
  36. elif key == 'class':
  37. return self.driver.find_element_by_class_name(value)
  38. elif key == 'name':
  39. return self.driver.find_element_by_name(value)
  40. elif key == 'tag':
  41. return self.driver.find_element_by_tag_name(value)
  42. elif key == 'linkText':
  43. return self.driver.find_element_by_link_text(value)
  44. elif key == 'cssSelector':
  45. return self.driver.find_element_by_css_selector(value)
  46. elif key == 'xpath':
  47. return self.driver.find_element_by_xpath(value)
  48.  
  49. except:
  50. return None
  51.  
  52. if __name__ == '__main__':
  53. for i in range(3):
  54. findElement = FindElement(i)
  55. 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. [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 ...

  2. Prncnfg.vbs参数详解

    语法: Cscript Prncnfg {-g | -t | -x | -?} [-S <ServerName>] [-P <PrinterName>] [-z <New ...

  3. win10彻底禁用自动更新,win10怎样彻底关闭自动更新,永久关闭win10自动更新,win10更新助手

    首先,请广大win10受害者原谅小菜用一个如此长的标题来吸引你们,为了尽最大努力帮助那些饱受win10自动更新折磨的朋友们,小菜不得已出此下策,望见谅! windows 10是一个神奇的操作系统,当你 ...

  4. 深入理解 call,apply 和 bind

    在JavaScript 中,call.apply 和 bind 是 Function 对象自带的三个方法,这三个方法的主要作用是改变函数中的 this 指向,从而可以达到`接花移木`的效果.本文将对这 ...

  5. 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分开 ...

  6. Open ID Connect(OIDC)在 ASP.NET Core中的应用

    我们在<ASP.NET Core项目实战的课程>第一章里面给identity server4做了一个全面的介绍和示例的练习 ,这篇文章是根据大家对OIDC遇到的一些常见问题整理得出. 本文 ...

  7. 再谈AbstractQueuedSynchronizer2:共享模式与基于Condition的等待/通知机制实现

    共享模式acquire实现流程 上文我们讲解了AbstractQueuedSynchronizer独占模式的acquire实现流程,本文趁热打铁继续看一下AbstractQueuedSynchroni ...

  8. 实现iframe高度自适应

    iframe高度自适应使用场景是类似于微博,新闻等点击加载更多这种功能实现,要求iframe的高度能够跟随内容的变化而变化. 父html文件,也就是引用ifram的文件 src="blog/ ...

  9. 关于Python深浅拷贝

    拷贝: 说明:原则上就是把数据分离出来,复制其数据,并以后修改互不影响. 何来深浅拷贝的说法? 深浅拷贝的“深”和“浅”可以理解为从变量到硬盘上的物理存储介质之间的层次的多少. 下面用一个示例来解释浅 ...

  10. 死磕 java集合之ConcurrentHashMap源码分析(二)——扩容

    本章接着上一章,链接直达请点我. 初始化桶数组 第一次放元素时,初始化桶数组. private final Node<K,V>[] initTable() { Node<K,V> ...