PageFactory設(shè)計模式基于python實現(xiàn)
前言
pageFactory的設(shè)計模式能在java里執(zhí)行的原因是java自帶了PageFactory類,而在python中沒有這樣的包,但是已經(jīng)有人寫好了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))
調(diào)用的例子
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_ (為避免與內(nèi)置的關(guān)鍵字ID沖突,所以多了個下劃線的后綴)
- name
- class_name
- css_selector
- tag_name
- xpath
- link_text
- partial_link_text
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用python切片實現(xiàn)二維數(shù)組復(fù)制示例
今天小編就為大家分享一篇使用python切片實現(xiàn)二維數(shù)組復(fù)制示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11利用Python通過獲取剪切板數(shù)據(jù)實現(xiàn)百度劃詞搜索功能
大家是不是嫌棄每次打開百度太麻煩?今天教大家利用Python通過獲取剪切板數(shù)據(jù)實現(xiàn)百度劃詞搜索功能,用程序直接打開網(wǎng)頁,需要的朋友可以參考下2021-06-06Python 網(wǎng)頁解析HTMLParse的實例詳解
這篇文章主要介紹了Python 網(wǎng)頁解析HTMLParse的實例詳解的相關(guān)資料,python里提供了一個簡單的解析模塊HTMLParser類,使用起來也是比較簡單的,解析語法沒有用到XPath類似的簡潔模式,需要的朋友可以參考下2017-08-08使用Tensorflow-GPU禁用GPU設(shè)置(CPU與GPU速度對比)
這篇文章主要介紹了使用Tensorflow-GPU禁用GPU設(shè)置(CPU與GPU速度對比),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06