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()
    
    
    
        
    幻想毫无价值,计划渺如尘埃,目标不可能达到。这一切的一切毫无意义——除非我们付诸行动。
  • 相关阅读:
    codeforces 814B An express train to reveries
    codeforces 814A An abandoned sentiment from past
    codeforces 785D D. Anton and School
    codeforces 785C Anton and Fairy Tale
    codeforces 791C Bear and Different Names
    AOP详解
    Spring集成JUnit测试
    Spring整合web开发
    IOC装配Bean(注解方式)
    IOC装配Bean(XML方式)
  • 原文地址:https://www.cnblogs.com/TodayWind/p/15325061.html
Copyright © 2011-2022 走看看