Python selenium find_element()示例详解

selenium有以下定位方式:

driver.find_element_by_id(‘id')
driver.find_element_by_xpath('xpath')
driver.find_element_by_link_text('link_text')
driver.find_element_by_partial_link_text('partial_link_text')
driver.find_element_by_name('name')
driver.find_element_by_tag_name('tag_name')
driver.find_element_by_class_name('class_name')
driver.find_element_by_css_selector('css_selector')

但我们看下源码:

D:\Program Files\Python27\Lib\site-packages\selenium\webdriver\remote\webdriver.py

可以看到,上面那些定位方式,实际上都是调用的driver.find_element(by, value)

我们继续看下find_element()的源码,大部分方法最终全是通过By.CSS_SELECTOR来实现的查找

那By又都有哪些条件呢?

D:\Program Files\Python27\Lib\site-packages\selenium\webdriver\common\by.py

继续看源码,可以看到下面8种

ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"

所以我们以后就都只用find_element()就好了,因为最终实际上也都是调用的这个方法。

简单封装一下,以后就记住find_element()一个方法即可。

from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from appium import webdriver

class BasePage(object):
    def split_locator(self, locator):
        """
        分解定位表达式,如'css,.username',拆分后返回'css selector'和定位表达式'.username'(class为username的元素)
        :param locator: 定位方法+定位表达式组合字符串,如'css,.username'
        :return: locator_dict[by], value:返回定位方式和定位表达式
        """
        by = locator.split(',')[0]
        value = locator.split(',')[1]
        locator_dict = {
            'id': 'id',
            'name': 'name',
            'class': 'class name',
            'tag': 'tag name',
            'link': 'link text',
            'plink': 'partial link text',
            'xpath': 'xpath',
            'css': 'css selector',
        }
        if by not in locator_dict.keys():
            raise NameError("wrong locator!'id','name','class','tag','link','plink','xpath','css',exp:'id,username'")
        return locator_dict[by], value

    def wait_element(self, locator, sec=30):
        """
        等待元素出现
        :param locator: 定位方法+定位表达式组合字符串,用逗号分隔,如'css,.username'
        :param sec:等待秒数
        """
        by, value = self.split_locator(locator)
        try:
            WebDriverWait(self.driver, sec, 1).until(lambda x: x.find_element(by=by, value=value),message='element not found!!!')
            log.info(u'等待元素:%s' % locator)
        return True
        except TimeoutException:
            return False
        except Exception, e:
            raise e

    def get_element(self, locator, sec=60):
        """
        获取一个元素
        :param locator: 定位方法+定位表达式组合字符串,用逗号分隔,如'css,.username'
        :param sec:等待秒数
        :return: 元素可找到返回element对象,否则返回False
        """
        if self.wait_element(locator, sec):
            by, value = self.split_locator(locator)
            try:
                element = self.driver.find_element(by=by, value=value)
                log.info(u'获取元素:%s' % locator)
                return element
            except Exception, e:
                raise e
        else:
            return False

    def get_elements(self, locator):
        """
        获取一组元素
        :param locator: 定位方法+定位表达式组合字符串,用逗号分隔,如'css,.username'
        :return: elements
        """
        by, value = self.split_locator(locator)
        try:
            elements = WebDriverWait(self.driver, 60, 1).until(lambda x: x.find_elements(by=by, value=value))
            log.info(u'获取元素列表:%s' % locator)
            return elements
        except Exception, e:
            raise e

以后调用,先定义元素,如

button = "id,su" # 页面上id为su的元素

在用例中查找时,只要写

find_element(button)

整体框架源码:

https://github.com/songzhenhua/selenium_ui_auto/blob/master/page_object/base_page.py

总结

到此这篇关于Python selenium find_element()详解的文章就介绍到这了,更多相关selenium find_element()详解内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python selenium find_element()示例详解

    selenium有以下定位方式: driver.find_element_by_id('id') driver.find_element_by_xpath('xpath') driver.find_element_by_link_text('link_text') driver.find_element_by_partial_link_text('partial_link_text') driver.find_element_by_name('name') driver.find_element

  • 熵值法原理及Python实现的示例详解

    目录 1.简单理解 信息熵 2.编制指标 (学术情景应用) 3.python实现 3.1 数据准备 3.2 数据预处理 3.3 熵值.权重计算 3.4 编制综合评价指标 熵值法也称熵权法,是学术研究,及实际应用中的一种常用且有效的编制指标的方法. 1.简单理解 信息熵 机器学习中的决策树算法是对信息熵的一种典型的应用. 在信息论中,使用 熵 (Entropy)来描述随机变量分布的不确定性. 假设对随机变量X,其可能的取值有x1,x2,...,xn .即有n种可能发生的结果.其对应发生的概率依次为

  • python支付宝支付示例详解

    本文实例为大家分享了python支付宝支付示例代码,供大家参考,具体内容如下 项目演示: 1.输入金额 2.扫码支付: 3.支付完成: 一.注册账号 https://openhome.alipay.com/platform/appDaily.htm?tab=info 二.设置应用公钥 三.代码实现 1.项目结构: 2.把生成的     应用私钥     和    支付宝的公钥       放入keys目录下: 注意: 支付宝公钥 商户私钥 --- 配置商户应用私钥--copy到key目录下 --

  • python selenium firefox使用详解

    演示的版本信息如下: Python 3.6.0 Selenium 3.5.0 Firefox 55.0.3 geckodriver v1.0.18.0 win64 1.前提准备 1.1 安装python https://www.jb51.net/article/144750.htm 1.2 安装Firefox浏览器 1.3下载geckodriver(是Firefox的官方webdriver) 2.Python安装selenium python 3.0X包自带pip和setuptools.我们可以

  • Python ini配置文件示例详解

    目录 INI介绍 关于configparser INI文件格式 读取配置文件 写入配置文件 总结 INI介绍 INI是英文“初始化”(initialization)的缩写,被用来对操作系统或特定程序初始化或进行参数设置.由节(section). 键(key).值(value)构成.在windows系统中有很多INI文件,例如“System32.ini”和“Win.ini”,相信大家并不陌生.Python 中操作配置文件的模块为configparser,这个模块可以用来解析与Windows上INI

  • Python + selenium 自动化测试框架详解

    目录 自动化测试框架 1.基础层(通用层) 2.功能层(页面层) 3.业务层 4.用例层 4层框架对应的项目工程 总结 自动化测试框架 项目自动化测试框架设计为4层 1.基础层(通用层) 基础层: 将通用,重复性比较高的代码封装到这里. 写通用的代码的. 其他3层想要的话,就可以直接调用. 例如: 读取测试数据的代码,读取配置信息的代码:截图的代码的,定位元素的代码等等 2.功能层(页面层) 功能层: pages 封装页面的. 把页面封装成类.类中包含:属性和方法 把页面上的界面元素定义成类的属

  • python selenium实现登录豆瓣示例详解

    使用python爬虫selenium访问豆瓣https://www.douban.com/,实现模拟登录过程. 网页界面如图所示 首先导包后,定位图中 密码登录 的element,并点击. 经分析,该标签的class_name为’account-tab-account’. from selenium import webdriver import time driver = webdriver.Chrome() driver.get('https://www.douban.com/') # 点击

  • Python网络爬虫中的同步与异步示例详解

    一.同步与异步 #同步编程(同一时间只能做一件事,做完了才能做下一件事情) <-a_url-><-b_url-><-c_url-> #异步编程 (可以近似的理解成同一时间有多个事情在做,但有先后) <-a_url-> <-b_url-> <-c_url-> <-d_url-> <-e_url-> <-f_url-> <-g_url-> <-h_url-> <--i_ur

  • selenium+python环境配置教程详解

    一.安装Python 1)官网下载安装 2)配置环境变量(未勾选自动配置需要手动配置) 3)检查是否安装成功(交互窗口中输入Python -v) 二.Selenium 3.X +FireFox 驱动 +geckodriver 1.安装selenium: 1)W+r输入cmd,然后输入pip install selenium 2)安装FireFox,添加附加组件selenium IDE.FireBUG 3) https://github.com/mozilla/geckodriver/releas

  • Python程序包的构建和发布过程示例详解

    关于我 编程界的一名小程序猿,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. 联系:hylinux1024@gmail.com 当我们开发了一个开源项目时,就希望把这个项目打包然后发布到 pypi.org 上,别人就可以通过 pip install 的命令进行安装.本文的教程来自于 Python 官方文档 , 如有不正确的地方欢迎评论拍砖. 0x00 创建项目 本文使用到的项目目录为 ➜ packaging-tuto

随机推荐