PageFactory设计模式基于python实现

 更新时间:2020年04月14日 11:36:08   作者:seyOrd  
这篇文章主要介绍了PageFactory设计模式基于python实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

前言

pageFactory的设计模式能在java里执行的原因是java自带了PageFactory类,而在python中没有这样的包,但是已经有人写好了pageFactory在python的包,可以拿来用

pageFactory 用于python支持的py文件

__all__ = ['cacheable', 'callable_find_by', 'property_find_by']
def cacheable_decorator(lookup):
  def func(self):
    if not hasattr(self, '_elements_cache'):
      self._elements_cache = {} # {callable_id: element(s)}
    cache = self._elements_cache

    key = id(lookup)
    if key not in cache:
      cache[key] = lookup(self)
    return cache[key]
  return func
cacheable = cacheable_decorator

_strategy_kwargs = ['id_', 'xpath', 'link_text', 'partial_link_text',
          'name', 'tag_name', 'class_name', 'css_selector']

def _callable_find_by(how, using, multiple, cacheable, context, driver_attr, **kwargs):
  def func(self):
    # context - driver or a certain element
    if context:
      ctx = context() if callable(context) else context.__get__(self) # or property
    else:
      ctx = getattr(self, driver_attr)

    # 'how' AND 'using' take precedence over keyword arguments
    if how and using:
      lookup = ctx.find_elements if multiple else ctx.find_element
      return lookup(how, using)

    if len(kwargs) != 1 or list(kwargs.keys())[0] not in _strategy_kwargs:
      raise ValueError(
        "If 'how' AND 'using' are not specified, one and only one of the following "
        "valid keyword arguments should be provided: %s." % _strategy_kwargs)

    key = list(kwargs.keys())[0];
    value = kwargs[key]
    suffix = key[:-1] if key.endswith('_') else key # find_element(s)_by_xxx
    prefix = 'find_elements_by' if multiple else 'find_element_by'
    lookup = getattr(ctx, '%s_%s' % (prefix, suffix))
    return lookup(value)

  return cacheable_decorator(func) if cacheable else func
def callable_find_by(how=None, using=None, multiple=False, cacheable=False, context=None, driver_attr='_driver',
           **kwargs):
  return _callable_find_by(how, using, multiple, cacheable, context, driver_attr, **kwargs)


def property_find_by(how=None, using=None, multiple=False, cacheable=False, context=None, driver_attr='_driver',
           **kwargs):
  return property(_callable_find_by(how, using, multiple, cacheable, context, driver_attr, **kwargs))

调用的例子

from pageobject_support import callable_find_by as by
from selenium import webdriver
from time import sleep
class BaiduSearchPage(object):
  def __init__(self, driver):
    self._driver = driver #初始化浏览器的api
  search_box = by(id_="kw")
  search_button = by(id_='su')
  def search(self, keywords):
    self.search_box().clear()
    self.search_box().send_keys(keywords)
    self.search_button().click()

支持的定位api

  • id_ (为避免与内置的关键字ID冲突,所以多了个下划线的后缀)
  • name
  • class_name
  • css_selector
  • tag_name
  • xpath
  • link_text
  • partial_link_text

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • python中下标和切片的使用方法解析

    python中下标和切片的使用方法解析

    这篇文章主要介绍了python中下标和切片的使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • python设置值及NaN值处理方法

    python设置值及NaN值处理方法

    今天小编就为大家分享一篇python设置值及NaN值处理方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Python基于随机采样一至性实现拟合椭圆

    Python基于随机采样一至性实现拟合椭圆

    这篇文章主要为大家详细介绍了Python如何基于随机采样一至性实现拟合椭圆,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的可以了解一下
    2022-11-11
  • python实现移位加密和解密

    python实现移位加密和解密

    这篇文章主要为大家详细介绍了python实现移位加密和解密,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • 使用python切片实现二维数组复制示例

    使用python切片实现二维数组复制示例

    今天小编就为大家分享一篇使用python切片实现二维数组复制示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • 利用Python通过获取剪切板数据实现百度划词搜索功能

    利用Python通过获取剪切板数据实现百度划词搜索功能

    大家是不是嫌弃每次打开百度太麻烦?今天教大家利用Python通过获取剪切板数据实现百度划词搜索功能,用程序直接打开网页,需要的朋友可以参考下
    2021-06-06
  • python二分查找算法的递归实现方法

    python二分查找算法的递归实现方法

    这篇文章主要介绍了python二分查找算法的递归实现方法,结合实例形式分析了Python二分查找算法的相关实现技巧,需要的朋友可以参考下
    2016-05-05
  • Python 网页解析HTMLParse的实例详解

    Python 网页解析HTMLParse的实例详解

    这篇文章主要介绍了Python 网页解析HTMLParse的实例详解的相关资料,python里提供了一个简单的解析模块HTMLParser类,使用起来也是比较简单的,解析语法没有用到XPath类似的简洁模式,需要的朋友可以参考下
    2017-08-08
  • 使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)

    使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)

    这篇文章主要介绍了使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python装饰器原理与简单用法实例分析

    Python装饰器原理与简单用法实例分析

    这篇文章主要介绍了Python装饰器原理与简单用法,结合实例形式分析了Python装饰器的概念、原理、使用方法及相关注意事项,需要的朋友可以参考下
    2018-04-04

最新评论