首页 > 其他分享 >第11课、封装base

第11课、封装base

时间:2023-02-08 01:13:10浏览次数:28  
标签:11 封装 name admin self driver locator base find

 

 

1.sleep: 进程休眠

--- 等待固定的时间,如等待5秒:sleep(5)

 

2.implicitly_wait(30):等待页面完全加载完成 属于隐式等待

--页面加载完成的标志是左上角转圈结束

--如果页面元素加载完成了,某些js加载失败,页面左上角一直转圈,会耗费时间

-- 全局的,只写一次就行了

-- 缺点:页面有跳转的时候,它不知道去等跳转后的页面

 

3. WebDriverWait(self,driver, timeout, poll_frequency=POLL_FREQUENCY,ignored_exceptions=None)

显示等待

--driver:打开浏览器的一个实例参数,这个不用多说

--timeout:超时的总时长30s

--poll_frequency:循环去查询的间隙时间,默认0.5秒

--ignored_exceptions:忽略异常,默认忽略NoSuchElementException

 

---------------------------

显示等待示例:

上一节中记流水账的登录代码:

# coding=utf-8
from selenium import webdriver
import time
profile_path = r'C:\Users\songping\AppData\Roaming\Mozilla\Firefox\Profiles\gjihjypg.default'
profile = webdriver.FirefoxProfile(profile_path)
driver = webdriver.Firefox(profile)
url = "http://192.168.0.101/phpwind/admin.php#initiator"
driver.get(url)
time.sleep(5)
driver.find_element_by_name("admin_name").send_keys("admin")
driver.find_element_by_name("admin_pwd").send_keys("123456")
driver.find_element_by_name("submit").click()
#登录成功之后
login_xpath = 'html/body/table/tbody[1]/tr[1]/td/div/div/p/a[2]'

result =driver.find_element_by_xpath(login_xpath).text
print("获取到的登录结果:%s"%result)

assert result == "[注销]"
加入显示等待,改进代码为:

# coding=utf-8
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait

profile_path = r'C:\Users\songping\AppData\Roaming\Mozilla\Firefox\Profiles\gjihjypg.default'
profile = webdriver.FirefoxProfile(profile_path)
driver = webdriver.Firefox(profile)
url = "http://192.168.0.102/phpwind/admin.php#initiator"
driver.get(url)

#driver.find_element_by_name("admin_name").send_keys("admin")
ele1 = WebDriverWait(driver, 10).until(lambda x: x.find_element("name","admin_name"))
ele1.send_keys("admin")

#driver.find_element_by_name("admin_pwd").send_keys("123456")
ele2 = WebDriverWait(driver, 10).until(lambda x: x.find_element("name","admin_pwd"))
ele2.send_keys("123456")

#driver.find_element_by_name("submit").click()
ele3 = WebDriverWait(driver, 10).until(lambda x: x.find_element("name","submit"))
ele3.click()

#登录成功之后
login_xpath = 'html/body/table/tbody[1]/tr[1]/td/div/div/p/a[2]'
result =driver.find_element_by_xpath(login_xpath).text
print("获取到的登录结果:%s"%result)
assert result == "[注销]"

 

 

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

class Base():
    def __init__(self):
      self.driver = driver

    def find(self,locator):
        ele = WebDriverWait(self.driver, 10).until(lambda x: x.find_element(*locator))
        return ele

    def send(self,locator,text):
        ele =self.find(locator)
        ele.send_keys(text)

    def click(self,locator):
        self.find(locator).click()

    def clear(self,locator):
        self.find(locator).clear()

    def get_text(self, locator):
        ele =self.find(locator)
        return ele.text

if __name__ == '__main__':
    driver = webdriver.Firefox()
    driver.get("http://192.168.0.102/phpwind/admin.php#initiator")
    loc1 = ("name","admin_name")
    loc2 = ("name", "admin_pwd")
    loc3 = ("name", "submit")
    login_xpath = ("xpath",'html/body/table/tbody[1]/tr[1]/td/div/div/p/a[2]')

    b = Base()  #实例
    b.send(loc1,"admin")
    b.send(loc2, "123456")
    b.click(loc3)
    t = b.get_text(login_xpath)
    print(t)
    assert t == "[注销]"

------------------------

封装好后写个登录模块,调用base模块:

1.base代码:

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

class Base():

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

    def find(self,locator):
        ele = WebDriverWait(self.driver, 10).until(lambda x: x.find_element(*locator))
        return ele

    def send(self,locator,text):
        ele =self.find(locator)
        ele.send_keys(text)

    def click(self,locator):
        self.find(locator).click()


    def clear(self,locator):
        self.find(locator).clear()

    def get_text(self, locator):
        ele =self.find(locator)
        return ele.text

if __name__ == '__main__':
    from selenium import webdriver
    driver = webdriver.Firefox()
    driver.get("http://192.168.0.102/phpwind/admin.php#initiator")
    loc1 = ("name","admin_name")
    loc2 = ("name", "admin_pwd")
    loc3 = ("name", "submit")
    login_xpath = ("xpath",'html/body/table/tbody[1]/tr[1]/td/div/div/p/a[2]')

    b = Base()  #实例
    b.send(loc1,"admin")
    b.send(loc2, "123456")
    b.click(loc3)
    t = b.get_text(login_xpath)
    print(t)
    assert t == "[注销]"

2.login_fuc 登录模块,登录模块调用base模块:

from t7.base import Base

class Login(Base):
    loc1 = ("name","admin_name")
    loc2 = ("name", "admin_pwd")
    loc3 = ("name", "submit")
    login_xpath = ("xpath",'html/body/table/tbody[1]/tr[1]/td/div/div/p/a[2]')

    def login(self, user="admin", psw="123456"):
        self.send(self.loc1,user)
        self.send(self.loc2,psw)
        self.click(self.loc3)

if __name__ == '__main__':
    from selenium import webdriver
    driver = webdriver.Firefox()
    driver.get("http://192.168.0.102/phpwind/admin.php#initiator")

    loginpage = Login(driver)
    loginpage.login()

 

 

 

 

 

 

 

 

 

 

 

标签:11,封装,name,admin,self,driver,locator,base,find
From: https://www.cnblogs.com/pingzi66-ww/p/17100281.html

相关文章

  • Codeforces Round #850 (Div. 2, based on VK Cup 2022 - Final Round)
    题目链接\(A_1\)核心思路不要傻乎乎的模拟先观察性质。(2,3)(4,5)(6,7)(8,9).我们可以发现a的模4都是大于1的,b的都是小于。发现这个性质之后就可以写代码了。//P......
  • 如何为 Debian 11 安装图形用户界面 (GUI)
    如何为Debian11安装图形用户界面(GUI)allway2于2021-12-2617:30:14发布11767收藏23文章标签:debian服务器linux版权华为云开发者联盟该内容已被华为云开发......
  • CSharp: donet 7 create database view mapping with EF core 7.02
     sql: createviewViewEmployeeMastersasselecta.*,b.Nameas'DepartmentName',b.Codeas'DepartmentCode'fromEmployeeMastersasa,DepartmentMasterasb......
  • 31-封装
    封装该露的露,该藏的藏◆我们程序设计要追求“高内聚,低耦合"。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。封装(数......
  • 11.2支撑硬件输入输出的IN指令和OUT指令
    Window控制硬件时借助的是输入输出指令。其中具有代表性的两个输入输出指令就是IN和OUT。这些指令也是汇编语言的助记符IN指令和OUT指令的语法如图11-2所示。这是......
  • 硬件控制方法——11.1应用和硬件无关?
    在用C语言等高级编程语言开发的Windows应用中,大家很少能接触到直接控制硬件的指令。这是因为硬件的控制是由Windows全权负责的。不过,Windows提供了通过应用来间接控......
  • 10.11循环处理的实现方法
    接下来,让我们继续解析汇编语言的源代码,看一下for循环及if条件分支等C语言程序的流程控制是如何实现的。代码清单10-8是将局部变量i作为循环计数器“连续进行10次......
  • [CF1190D] Tokitsukaze and Strange Rectangle
    题目描述Thereare$n$pointsontheplane,the$i$-thofwhichisat$(x_i,y_i)$.Tokitsukazewantstodrawastrangerectangularareaandpickallt......
  • P1157 组合的输出
    组合的输出题目描述排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r<=n),我们可以简单地将n个元素理解为自然数1,2,...,n,从中任取r......
  • git rebase 详解
    今天我们来聊一下git中的变基gitrebase命令的文档描述是 Reapplycommitsontopofanotherbasetip,从字面上理解是「在另一个基端之上重新应用提交」,这个定义听起来有......