python+selenium10----二次封装

显示等待----python+selenium----Selenium的3种等待方式

 

from selenium import webdriver
from time import sleep
from selenium.webdriver.support.ui import WebDriverWait

"""
Example:
    from selenium.webdriver.support.ui import WebDriverWait
    #10秒内每0.5秒循环查找元素,找到就返回元素本身,找不到跑出异常
    element = WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id("someId"))
    #30秒内每隔1秒循环查找元素,判断元素有没有消失(不显示),找不到元素返回Ture,找到跑出异常(忽略元素不可见异常TimeoutException)
    is_disappeared = WebDriverWait(driver, 30, 1, (ElementNotVisibleException)).until_not(lambda x: x.find_element_by_id("someId").is_displayed())
"""
driver = webdriver.Firefox()
driver.get('http://127.0.0.1/zentao/user-login.html')


ele1 = WebDriverWait(driver, 10, 0.5).until(lambda x: x.find_element_by_id("account"))
ele1.send_keys("admin")

ele2 = WebDriverWait(driver, 10, 0.5).until(lambda x: x.find_element_by_name("password"))
ele2.send_keys("123456")

ele3 = WebDriverWait(driver, 10, 0.5).until(lambda x: x.find_element_by_id("submit"))
ele3.click()



ele4 = WebDriverWait(driver, 10, 0.5).until(lambda x: x.find_element_by_css_selector("#userMenu>a")).text

print(ele4)

 

 

定位方式参数化

from selenium import webdriver
from selenium.webdriver.common.by import By


driver = webdriver.Firefox()
driver.get('http://www.baidu,com')

#定位方法参数化,合并八种定位方式
#用By.ID方法和直接输入参数方法实现效果是一样的
"""
class By(object):

    #Set of supported locator strategies.

    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"

"""
driver.find_element(By.ID, 'kw').send_keys("ById")
driver.find_element("id", "kw").send_keys("selenium")
driver.find_element("xpath", ".//*[@id='kw']")
driver.find_element("css selector", "#kw")

 

 

封装方法

在common中新增base.py

#base.py

from selenium.webdriver.support.ui import WebDriverWait


class Base():

    def __init__(self, driver):
        self.driver = driver

    # 封装方法
    # 对selenium原生的查找元素方法进行二次封装,
    # 30秒内循环查找页面上有没有耨个元素
    def findElement(self, locator, timeout=30):
        '''
        locator 参数是定位方式,如("id", "kw"),把两个参数合并为一个
        *号是把两个参数分开传值
        Usage:
            locator = ("id", "kw")
            driver.find_element(*locator)`
        '''
        element = WebDriverWait(self.driver, timeout, 1).until(lambda x: x.find_element(*locator))
        return element

    def send(self, locator, text):
        """封装输入文本方法"""
        ele = self.findElement(locator)
        ele.send_keys(text)

    def click(self, locator):
        """封装点击方法"""
        self.findElement(locator).click()

    def clear(self, locator):
        """封装清空输入框方法"""
        self.findElement(locator).clear()

    def get_text(self, locator):
        """封装获取文本信息方法"""
        ele = self.findElement(locator)
        return ele.text

 

 修改

 gonggonglei.py

#gonggonglei.py

from common.base import Base
from time import sleep

class GongGongLei(Base):
    """公共类"""
    loc1 = ("id", "account")
    loc2 = ("name", "password")
    loc3 = ("id", "submit")
    loc4 = ("css selector", "#userMenu>a")

    def Login(self, username, password):
        """登录方法"""
        self.clear(self.loc1)
        self.send(self.loc1, username)
        self.clear(self.loc2)
        self.send(self.loc2, password)
        self.click(self.loc3)


    def Is_login(self):
        t = ""
        try:
            t = self.get_text(self.loc4)
            print("成功获取信息:%s" % t)
        except:
            t = ""
        return t

    def is_alert_exist(self):
        try:
            sleep(2)
            alert = self.driver.switch_to.alert
            text = alert.text
            alert.accept()
            return text
        except:
            return ""

 

posted @ 2020-09-23 00:18  莫使娇躯空对月  阅读(226)  评论(0编辑  收藏  举报