使用title_contains检查页面是否正确

 


from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
import time

driver=webdriver.Firefox()
driver.get("https://www.baidu.com/")
time.sleep(3)
print(EC.title_contains("一下")(driver))    #True
print(EC.title_is("123")(driver))   #False
# EC.title_contains("一下")   title部分匹配
# EC.title_is("百度一下,你就知道")      title完全比配,
print(driver.title)
driver.quit()

 

 

 

使用不同方式进行定位

 

使用Expected_conditions判断元素是否可见

 

EC.visibility_of_element_located   判断元素是否可见 看html中元素的visiable属性
如果定位到就返回WebElement,找不到元素 报错Message: no such element: Unable to locate element
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
import time
from selenium.webdriver.support.ui import WebDriverWait

driver=webdriver.Firefox()
driver.get("http://www.5itest.cn/login?goto=/course/explore")
#element=driver.find_element_by_xpath("//input[@id='login_username']")
locator=("xpath","//input[@id='login_username']")
element=WebDriverWait(driver,10).until(EC.visibility_of_element_located(locator))    #判断元素是否可见 为则贝累忒
element.send_keys("121331")
time.sleep(3)
driver.quit()

 

Expected_conditions源码分析

 

输入注册用户名字及获取用户信息

 

get_attribute 获取元素的属性值
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

driver=webdriver.Firefox()
driver.get("http://www.5itest.cn/login?goto=/course/explore")
element=driver.find_element_by_xpath("//input[@id='login_username']")
print(element.get_attribute("placeholder"))

element.send_keys("123@qq.com")
print(element.get_attribute("value"))
driver.quit()

 

如何生成用户名

 用到了random.sample()

from selenium import webdriver
import random
import  time
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

driver=webdriver.Firefox()
driver.get("http://www.5itest.cn/login?goto=/course/explore")
loc1=("xpath","//input[@id='login_username']")
loc2=("xpath","//input[@id='login_password']")
loc3=("","")
ram="asdfghjkl1234567890"
user_email=random.sample(ram,5)
user_pass=random.sample(ram,5)
print(user_email)      #输出是list
user_email=" ".join(random.sample(ram,5))+"@163.com"
print("转josn后%s:  "% user_email)
element=WebDriverWait(driver,10).until(EC.presence_of_element_located(loc1))
element.send_keys(user_email)
time.sleep(3)
element2=WebDriverWait(driver,10).until(EC.presence_of_element_located(loc2))
element2.send_keys(user_pass)
time.sleep(3)
driver.quit()

 

如何解决验证码思路

 

 如何解决验证码代码实战

 

使用pytesseract识别图片中得问题

 

showapiRequest解决图片验证码识别

 

注册输入验证码流程整合

 

注册流程梳理及代码封装

 

#coding=utf-8
from selenium import webdriver
import time
import random
from PIL import Image
from util.ShowapiRequest import ShowapiRequest
driver = webdriver.Chrome()
#浏览器初始化
def driver_init(): 
    driver.get("http://www.5itest.cn/register")
    driver.maximize_window()
    time.sleep(5)

#获取element信息
def get_element(id):
    element = driver.find_element_by_id(id)
    return element

#获取随机数
def get_range_user():
    user_info = ''.join(random.sample('1234567890abcdefghijklmn',8))
    return user_info

#获取图片
def get_code_image(file_name):
    driver.save_screenshot(file_name)
    code_element = driver.find_element_by_id("getcode_num")
    left = code_element.location['x']
    top = code_element.location['y']
    right = code_element.size['width']+left
    height = code_element.size['height']+top
    im = Image.open(file_name)
    img = im.crop((left,top,right,height))
    img.save(file_name)

#解析图片获取验证码
def code_online(file_name):
    r = ShowapiRequest("http://route.showapi.com/184-4","62626","d61950be50dc4dbd9969f741b8e730f5" )
    r.addBodyPara("typeId", "35")
    r.addBodyPara("convert_to_jpg", "0")
    r.addFilePara("image", file_name) #文件上传时设置
    res = r.post()
    print(res.text)
    text = res.json()['showapi_res_body']['Result']
    return text

#运行主程序
def run_main():
    user_name_info = get_range_user()
    user_email = user_name_info+"@163.com"
    file_name = "E:/Teacher/Imooc/SeleniumPython/Image/test02.png"
    driver_init()
    get_element("register_email").send_keys(user_email)
    get_element("register_nickname").send_keys(user_name_info)
    get_element("register_password").send_keys("111111")
    get_code_image(file_name)
    text = code_online(file_name)
    get_element("captcha_code").send_keys(text)
    get_element("register-btn").click()
    driver.close()

run_main()

 

以配置文件形式实现定位设计思想

 

 如何读取配置文件low代码

 导入pip install Configparser

将配置文件放置ini文件中

#coding=utf-8
import sys
sys.path.append('E:/Teacher/Imooc/SeleniumPython')
from selenium import webdriver
import time
import random
from PIL import Image
from find_element import FindElement
from ShowapiRequest import ShowapiRequest
class RegisterFunction(object):
    def __init__(self,url,i):
        self.driver = self.get_driver(url,i)
    #获取driver并且打开url
    def get_driver(self,url,i):
        if i == 1:
            driver = webdriver.Chrome()
        elif i == 2:

            driver = webdriver.Firefox()
        else:
            driver = webdriver.Edge()
        driver.get(url)
        driver.maximize_window()
        return driver
    #输入用户信息
    def send_user_info(self,key,data):
        self.get_user_element(key).send_keys(data)
    
    #定位用户信息,获取element
    def get_user_element(self,key):
        find_element = FindElement(self.driver)
        user_element = find_element.get_element(key)
        return user_element

    #获取随机数
    def get_range_user(self):
        user_info = ''.join(random.sample('1234567890abcdefghijklmn',8))
        return user_info

    #获取图片
    def get_code_image(self,file_name):
        self.driver.save_screenshot(file_name)
        code_element = self.get_user_element("code_image")
        left = code_element.location['x']
        top = code_element.location['y']
        right = code_element.size['width']+left
        height = code_element.size['height']+top
        im = Image.open(file_name)
        img = im.crop((left,top,right,height))
        img.save(file_name)

    #解析图片获取验证码
    def code_online(self,file_name):
        self.get_code_image(file_name)
        r = ShowapiRequest("http://route.showapi.com/184-4","62626","d61950be50dc4dbd9969f741b8e730f5" )
        r.addBodyPara("typeId", "35")
        r.addBodyPara("convert_to_jpg", "0")
        r.addFilePara("image", file_name) #文件上传时设置
        res = r.post()
        print(res.text)
        text = res.json()['showapi_res_body']['Result']
        return text
    

    def main(self):
        user_name_info = self.get_range_user()
        user_email = user_name_info+"@163.com"
        file_name = "E:/Teacher/Imooc/SeleniumPython/Image/test02.png"
        #code_text = self.code_online(file_name)
        self.send_user_info('user_email',user_email)
        self.send_user_info('user_name',user_name_info)
        self.send_user_info('password',"111111")
        self.send_user_info('code_text',"11111")
        self.get_user_element('register_button').click()
        code_error = self.get_user_element("code_text_error")
        if code_error == None:
            print("注册成功")
        else:
            self.driver.save_screenshot("E:/Teacher/Imooc/SeleniumPython/Image/codeerror.png")
        time.sleep(5)
        self.driver.close()
    
if __name__ == '__main__':
    for i in range(3):
        register_function = RegisterFunction('http://www.5itest.cn/register',i)
        register_function.main()
[RegisterElement]
user_email=id>register_email
user_email_error=id>register_email-error
user_name=id>register_nickname
user_name_error=id>register_nickname-error
password=id>register_password
password_error=id>register_password-error
code_image=id>getcode_num
code_text=id>captcha_code
code_text_error=id>captcha_code-error
register_button=id>register-btn

 

重构封装读取配置文件方法.

 

import configparser

# cf=configparser.ConfigParser()
# cf.read("ini文件路径 e:/123.ini")
# cf.get("RegisterElement","user_email")
class ReadIni():
    def load_ini(self,file_name):
        if file_name==None:
            file_name=r"F:\慕课网Selenium3与Python3实战Web自动化测试框架"
        self.cf=configparser.ConfigParser()
        self.cf.read(file_name)

    def get_value(self,node,key):
        if node==None:
            node="12345.ini"
        data=self.cf.get(node,key)
        return data


if __name__=='__main__':
    read_init=ReadIni()
    print(read_init.get_value("user_name"))

 

设计封装定位元素类

 

#coding=utf-8
#封装类
from util.read_ini import ReadIni
from log.user_log import UserLog
class FindElement(object):
    def __init__(self,driver):
        self.driver = driver
        get_user_log = UserLog()
        self.logger = get_user_log.get_log()
    def get_element(self,key):
        read_ini = ReadIni()
        data = read_ini.get_value(key)
        by = data.split('>')[0]
        value = data.split('>')[1]
        self.logger.info("定位方式:"+by+"--->定位值:"+value)
        try:
            if by == 'id':
                return self.driver.find_element_by_id(value)
            elif by == 'name':
                return self.driver.find_element_by_name(value)
            elif by == 'className':
                return self.driver.find_element_by_class_name(value)
            else:
                return self.driver.find_element_by_xpath(value)
        except:
            return None
#coding=utf-8
#ini读取类
import configparser
class ReadIni(object):
    def __init__(self,file_name=None,node=None):
        if file_name == None:
            file_name = "E:/Teacher/Imooc/SeleniumPython/config/LocalElement.ini"
        if node == None:
            self.node = "RegisterElement"
        else:
            self.node = node
        self.cf = self.load_ini(file_name)
    #加载文件
    def load_ini(self,file_name):
        cf = configparser.ConfigParser()
        cf.read(file_name)
        return cf

    #获取value得值
    def get_value(self,key):
        data = self.cf.get(self.node,key)
        return data
    

#if __name__ == '__main__':
#    read_init = ReadIni()
#    print(read_init.get_value('user_name'))

 

 

如何将整个注册流程脚本进行模块化实战讲解

 

 

注册失败进行截图处理

 

多浏览器跑case

 

 

 

11111

posted on 2019-05-21 18:54  仙水阳  阅读(175)  评论(0)    收藏  举报