selenium练习5【封装find_显示等待】

1.basepage.py

from selenium import webdriver
#公共的,对driver初始化的部分做抽离
from selenium.webdriver.remote.webdriver import WebDriver
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait


class BasePage:
    # def __init__(self,base_url: WebDriver = None):
    #     #避免driver重复初始化
    #     if base_url is None:
    #         opt = webdriver.ChromeOptions()
    #         opt.debugger_address = "127.0.0.1:9222"
    #         self.driver = webdriver.Chrome(options=opt)
    #         self.driver.implicitly_wait(10)
    #     else:
    #         self.driver = base_url

    def __init__(self,base_url:WebDriver = None):
        if base_url is None:
            opt = webdriver.ChromeOptions() #配置chrome启动是属性的类
            opt.debugger_address = "127.0.0.1:9222" #设置调试器地址
            self.driver = webdriver.Chrome(options=opt)
            self.driver.implicitly_wait(10) #启动时添加指定的选项
        else:
            self.driver = base_url
    def find(self,by:WebDriver,locator:str):
        return self.driver.find_element(by,locator)
    def finds(self,by:WebDriver,locator:str):
        return self.driver.find_elements(by,locator)

    #封装显示等待
    def wait_for_click(self,locator,timeout=10):
        element: WebDriver = WebDriverWait(self.driver, timeout).until(expected_conditions.element_to_be_clickable(locator))
        return element

2.main_page.py

import time

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

from selenium_po.page.basepage import BasePage
from selenium_po.page.contact_page import ContactPage

class MainPage(BasePage):
    _base_url = "https://work.weixin.qq.com/wework_admin/frame"
    def goto_contact_page(self):

        self.find(By.ID,"menu_contacts").click()
        return ContactPage(self.driver)

3.contact_page.py

import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait

from selenium_po.page.basepage import BasePage


class ContactPage(BasePage):

    def click_add_member(self):
        from selenium_po.page.add_member_page import AddMemberPage

        ele = (By.CSS_SELECTOR, ".ww_operationBar .js_add_member")
        self.wait_for_click(ele)
        while True:
            # ele = driver.find_element_by_css_selector(".ww_operationBar .js_add_member")
            # ele.click()  #不停点,直到添加成员页面出现
            self.find(By.CSS_SELECTOR, ".ww_operationBar .js_add_member").click()# 解数组
            element = self.finds(By.ID,"username")#用elements找到username,说明进入到添加成员页面
            if len(element) > 0:
                break


        return AddMemberPage(self.driver)
    def get_member(self):
        time.sleep(2)
        eles = self.finds(By.CSS_SELECTOR,'.member_colRight_memberTable_td:nth-child(2)')
        name_list = []
        for value in eles:
            # 获取元素属性title的值,存入list内
            print(value.get_attribute("title"))
            # if value.get_attribute("title") == "七ds月3":
            #     return True
            # return False
            name_list.append(value.get_attribute("title"))
        # 断言目标名字是否在列表内
        return name_list

4.add_memmber_page.py

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

from selenium_po.page.basepage import BasePage


class AddMemberPage(BasePage):
    def add_member(self,name,id,mail):
        from selenium_po.page.contact_page import ContactPage
        # '_'代表python的私有变量
        _ele_name = (By.ID,"username")
        _ele_id = (By.ID,"memberAdd_acctid")
        _ele_mail = (By.ID,"memberAdd_mail")

        #讲解的效果示例:*self.ele_name
        self.find(*_ele_name).send_keys(name)
        # self.driver.find_element_by_id("memberAdd_english_name").send_keys("iui")
        self.find(*_ele_id).send_keys(id)
        # self.driver.find_element_by_id("memberAdd_phone").send_keys("15984005545")
        self.find(*_ele_mail).send_keys(mail)
        self.find(By.CSS_SELECTOR,".js_btn_save").click()
        return ContactPage(self.driver)



    def add_member_fail(self,name,id,mail):
        from selenium_po.page.contact_page import ContactPage

        self.driver.find_element_by_id("username").send_keys(name)
        # self.driver.find_element_by_id("memberAdd_english_name").send_keys("iui")
        self.driver.find_element_by_id('memberAdd_acctid').send_keys(id)
        # self.driver.find_element_by_id("memberAdd_phone").send_keys("15984005545")
        self.driver.find_element_by_id("memberAdd_mail").send_keys(mail)
        self.driver.find_element_by_css_selector(".js_btn_save").click()
        return ContactPage(self.driver)

5.test_po.py

import pytest

from selenium_po.page.main_page import MainPage


class TestLogin:
    def setup(self):
        self.main = MainPage()
    def teardown(self):
        pass
    @pytest.mark.parametrize("name,id,mail",[("lis465","lis465","223342566@qq.com"),("li44","lis55","22855566@qq.com"),("xix55","xi525","xi56i2@qq.com")])
    def test_login(self,name,id,mail):
        # name = "zhang"
        # id = "ssrf"
        # mail = "2253224@qq.com"
        namelist = self.main.goto_contact_page().click_add_member().add_member(name,id,mail).get_member()
        print(namelist)
        assert name in namelist
posted @ 2022-11-06 20:58  当时只道是寻常呀  阅读(49)  评论(0)    收藏  举报