zoukankan      html  css  js  c++  java
  • page

    page

    import os
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium import webdriver
    import unittest
    from time import sleep
    
    path = os.path.abspath('.')  # 当前目录
    
    
    class BasePage(object):
    
        def __init__(self, driver, base_url, page_title):
            self.driver = driver
            self.base_url = base_url
            self.page_title = page_title
    
        def on_page(self, page_title):
            return page_title in self.driver.title
    
        def _open(self, url, page_title):
            # 使用get打开访问链接地址
            self.driver.get(url)
            self.driver.maximize_window()
            # 使用assert进行校验,打开的窗口title是否与配置的title一致。调用on_page()方法
            assert self.on_page(page_title), u"打开开页面失败 %s" % url
            # 定义open方法,调用_open()进行打开链接
    
        def open(self):
            self._open(self.base_url, self.page_title)
    
        def find_element(self, *element):
            try:
                # 确保元素是可见的。
                # 注意:以下入参为元组的元素,需要加*。Python存在这种特性,就是将入参放在元组里。
                #      WebDriverWait(self.driver,10).until(lambda driver: driver.find_element(*loc).is_displayed())
                # 注意:以下入参本身是元组,不需要加*
                WebDriverWait(self.driver, 10).until(EC.visibility_of_all_elements_located(element))
                return self.driver.find_element(*element)
            except:
                print(u"%s 页面中未能找到 %s 元素" % (self, element))
    
        def switch_frame(self, loc):
            return self.driver.switch_to_frame(loc)
    
        def script(self, src):
            # 定义script方法,用于执行js脚本,范围执行结果
            self.driver.execute_script(src)
    
        def search_input(self, element, search_key):
            self.driver.find_element_by_id(element).send_keys(search_key)
    
        def search_button(self, element):
            self.driver.find_element_by_id(element).click()

     pageobject

    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as ec
    from Product.models import Element
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.support.select import Select
    import time
    import requests
    import json
    import random
    
    class PageObject:
        driver = None
    
        def sleep(self, second):
            if str(second).isdigit():
                time.sleep(int(second))
            else:
                time.sleep(0.5)
    
        def wait(self, seconds):
            self.driver.implicitly_wait(seconds)
            
        def open_url(self, url):
            self.driver.get(url)
    
        def max_size(self):
            self.driver.maximize_window()
    
        def click(self, locator):
            if locator is None:
                return
            else:
                try:
                    PageObject.find_element(self.driver, locator).click()
                except:
                    raise
    
        def click_point(self, x, y, left_click=True):
            if left_click:
                ActionChains(self.driver).move_by_offset(x, y - 103).click().perform()
            else:
                ActionChains(self.driver).move_by_offset(x, y - 103).context_click().perform()
    
        def send_keys(self, locator, value):
            if locator is None:
                return
            if value is None:
                self.clear(locator)
            else:
                PageObject.find_element(self.driver, locator).send_keys(value)
    
        def clear(self, locator):
            if locator is None:
                return
    
        def alert_accept(self):
            self.driver.switch_to.alert().accept()
    
        def alert_dismiss(self):
            self.driver.switch_to.alert().dismiss()
    
        def switch_to_window(self, title=None):
            handle = self.driver.current_window_handle
            if title:
                for handle_ in self.driver.window_handles:
                    if handle != handle_:
                        self.driver.switch_to.window(handle)
                        if self.driver.title == title:
                            break
                else:
                    raise ValueError("未找到标题为:" + title + " 的页面")
            else:
                for handle_ in self.driver.window_handles:
                    if handle != handle_:
                        self.driver.switch_to.window(handle)
    
        def switch_to_frame(self, locator=None):
            if locator:
                self.driver.switch_to.frame(PageObject.find_element(self.driver, locator))
            else:
                self.driver.switch_to.default_content()
    
        def forward(self):
            self.driver.forward()
    
        def back(self):
            self.driver.back()
            self.sleep(1)
    
        def refresh(self):
            self.driver.refresh();
    
        def close(self):
            self.driver.close()
    
        def quit(self):
            self.driver.quit()
    
        def select_by_text(self, element, value, visible=False):
            if element is None:
                return
            element = PageObject.find_element(self.driver, element)
            if not visible:
                Select(element).select_by_text(value)
            else:
                Select(element).select_by_visible_text(value)
    
        @staticmethod
        def find_element(driver, locator, more=False, timeout=20):
            message = locator
            if isinstance(locator, dict):
                locator = (locator.get("by", None), locator.get("locator", None))
                message = locator
            elif isinstance(locator, list) and len(locator) > 2:
                locator = (locator[0], locator[1])
                message = locator
            elif isinstance(locator, Element):
                message = locator.name
                locator = (locator.by, locator.locator)
            elif isinstance(locator, str):
                locator = tuple(locator.split(".", 1))
                message = locator
            else:
                raise TypeError("element参数类型错误: type:" + str(type(locator)))
            try:
                try:
                    if more:
                        return WebDriverWait(driver, timeout).until(ec.visibility_of_all_elements_located(locator))
                    else:
                        return WebDriverWait(driver, timeout).until(ec.visibility_of_element_located(locator))
                except:
                    if more:
                        return WebDriverWait(driver, timeout).until(ec.presence_of_all_elements_located(locator))
                    else:
                        return WebDriverWait(driver, timeout).until(ec.presence_of_element_located(locator))
            except Exception:
                raise RuntimeError("找不到元素:" + str(message))
    
        def move_to_element(self, locator):
            ActionChains(self.driver).move_to_element(self.find_element(self.driver, locator)).perform()
    
        # def autologin(self, locator1, locator2):
        #     telephone = '181'+''.join(str(random.choice(range(10))) for _ in range(8))
        #     payload = {"telephone": telephone}
        #     r = requests.post('https://your_website/your_api/code', data = payload)
        #     dic = r.json()
        #     code = dic['data']['code']
        #     self.sleep(3)
        #     self.send_keys(locator1, telephone)
        #     self.send_keys(locator2, code)
    
        def move_jindutiao(self, locator):
            self.driver.execute_script("arguments[0].scrollIntoView();", PageObject.find_element(self.driver, locator))
    
        # 鼠标悬停
        def xuanting(self, locator):
            el = PageObject.find_element(self.driver, locator)
            ActionChains(self.driver).move_to_element(el).perform()
    
    
    
        
    幻想毫无价值,计划渺如尘埃,目标不可能达到。这一切的一切毫无意义——除非我们付诸行动。
  • 相关阅读:
    借Adobe XD之力,自动生成Flutter代码
    阿里云移动研发平台体验报告
    一年的时间,我出版了一本实体书
    论一个前端开发者的自我修养
    es6 中模块的使用总结
    vue前端UI框架收集
    页面布局进化史
    JSON是一种轻量级数据交换格式
    web图片裁切插件 cropper.js 详细介绍
    css3中的@font-face你真的了解吗
  • 原文地址:https://www.cnblogs.com/TodayWind/p/15325061.html
Copyright © 2011-2022 走看看