selinum自动化测试代码编写框架

本文详细介绍了使用Selenium进行网页自动化测试的步骤,包括浏览器初始化、元素操作函数、XPATH查找技巧,以及如何处理表格数据。通过实例演示了文本框输入、按钮点击和定位复杂元素的方法,适合Web开发者进行效率提升和测试脚本编写。
摘要由CSDN通过智能技术生成

完成一个网页的自动化测试代码编写的步骤总结

一、引入头文件:

from selenium import webdriver
#用于查找网页元素
from selenium.webdriver.common.by import By
#设置等待时间的方式1
from selenium.webdriver.support.ui import WebDriverWait
#用于处理异常
from selenium.webdriver.support import expected_conditions as EC
#设置等待时间的方式2
import time
#用于操作键盘输入
from selenium.webdriver.common.keys import Keys

二、打开浏览器

driver=webdriver.Chrome()
url="https//weibo.com"

三、打开网页

def openWeb(driver,url):
        driver.get(url)#driver获取网页地址
        driver.implicitly_wait(20)#设置隐式等待时间为20秒
        driver.maximize_window()#浏览器窗口最大化
        if "weibo" in driver.current_url: #如果打开的网址中包含“weibo”字符串
            assert 1
        else:
            assert 0,"当前打开的页面并非要求打开的界面"

四、常用的文本框输入、按钮点击、元素查找、处理表格的通用函数

1、文本框输入函数:

def input_text(self,loc,value):
        try:
            exitt=WebDriverWait(self.driver, 10).until(EC.presence_of_element_located(loc)) #等待要输入的文本框元素加载出来       
            if exitt:
                inputPlace=self.driver.find_element(*loc)#找到文本框元素
                inputPlace.clear()#清空文本框
                inputPlace.send_keys(value)#文本框输入value值
            else:
                assert 0,"文本框元素不存在"
        except:
            assert 0,"文本输入失败"

2、按钮点击函数:

def Btn_click(self,loc):
        try:
            exitt=WebDriverWait(self.driver, 10).until(EC.presence_of_element_located(loc))            
            if exitt:
                self.driver.find_element(*loc).click()#找到按钮元素并点击
            else:
                assert 0,"按钮元素不存在"
        except:
            assert 0,"按钮点击失败"

3、查找元素并返回元素:

 def findElement(self,loc):
        exitt=WebDriverWait(self.driver, 10).until(EC.presence_of_element_located(loc))#检查并等待元素加载出来
        if exitt:
            return self.driver.find_element(*loc)#返回找到的元素
        else:
            assert 0,"元素不存在"

4、处理表格:

(1)处理表头:去除关键字所在的列号,若无,则返回100+列数

def tableHeadGetNum(self,keyword,loc):
        tableHead=self.findElement(loc)#找到表头元素
        ths=tableHead.find_elements_by_tag_name('th')#获取表头中的列们
        i=0
        for th in ths: #遍历列们
            i+=1
            k1=th.find_element_by_xpath('.//div') #获取当前列中存放列名的元素(原因见图1)
            k=self.driver.execute_script('return arguments[0].textContent',k1)  #用javascript语句获取列名
            if k==keyword: #如果列名与关键词相同
                return i #返回列数
            else:
                continue#否则继续遍历
        i=len(ths)+100 #到这则说明没有找到关键词的列,给总列数+100(即是一个不可能存在的列数)
        return i        #返回不可能存在的列数,用于后续判断是否找到需要的列

图1

(2)处理表格中的内容:传入要点击的按钮的编号、搜索的关键字、列名1、列名2;没有符合条件的列则返回2,没有要求的行则返回3,有结果则返回属于同一关键字的所有指定按钮:

例子:此时函数参数:列名1=“参赛队名称”,列名2=“操作”,关键字=“测试”,按钮编号=2
用于找到表格中所有参赛队名称为“测试”的行,这些行的操作中的第二个按钮,即“重置密码按钮”。最终目的是找到所有“测试”队的重置密码按钮。
图2

def tableBodyOperate(self,buttonNum,keyword,keyword1,keyword2,loc1,loc2):
        nameColNum=-1
        operateColNum=-1
        if keyword1!="null": #如果列名1不为空
            nameColNum=self.tableHeadGetNum(keyword1,loc1) #传入列名1和table head,获取列名1所在的列数,暂称为列1
        if keyword2!="null": #如果列名2不为空
            operateColNum=self.tableHeadGetNum(keyword2,loc1)    #传入列名2和table head获取列名2所在的列数,暂称为列2
        buttons=[]
        if nameColNum>100 or operateColNum>100: #出现这种情况就是列名1、列名2至少其中一个列不存在
            return 2
        else: #两个列都存在
            table=self.findElement(loc2) #获取tablebody
            trs=table.find_elements_by_tag_name('tr')  #获取表格中的所有行
            if len(trs)<=0: #如果行数为0,即表格没有内容
                return 3
            else:
                for tr in trs: #如果获取到了表格中的行们               
                    k1=tr.find_element_by_xpath('.//td['+str(nameColNum)+']//div') #获取(当前行,列1)这一格中存放内容的元素
                    k=self.driver.execute_script('return arguments[0].textContent',k1) #用执行javascript的方式获取元素内容
                    if k!=keyword and k!= 'null': #如果元素内容不是要找的关键字,并且元素内容不为空(为什么要判断不为空?虽然是自己写的代码,但是忘了。。。)
                        continue  #继续查找下一行
                    else:    #到此处即找到了列名1中元素=关键词的行                 
                        button=tr.find_element_by_xpath('.//td['+str(operateColNum)+']//button['+str(buttonNum)+']')  #获取所在行的列2中的第buttonNum个按钮
                        buttons.append(button) #将这个按钮存起来
                        continue #继续遍历
                return buttons   #到此处,就找到了所有列1=关键字的行中的指定按钮

(3)、获取表格中某一列中的所有元素,即下图中的红框内的内容

图3
输入列名,table head元素,table body元素

def tableText(self,colname1,loc1,loc2):
        colnum=self.tableHeadGetNum(colname1, loc1) #根据列名和表头元素得到列名对应的列数
        texts=[]
        if colnum>100: #此即说明当前表格中不存在该列
            return 2
        else: #此即说明找到了列
            table=self.findElement(loc2) #获取table body元素
            trs=table.find_elements_by_tag_name('tr') #获取表格中所有的行们
            if len(trs)<=0: #如果没有行
                return 3
            else:
                for tr in trs: #遍历行们
                    k1=tr.find_element_by_xpath('.//td['+str(colnum)+']//div') #获取(当前行,colnum)这一格中的元素
                    k=self.driver.execute_script('return arguments[0].textContent',k1) #获取当前格元素中的文本内容
                    texts.append(k)  #存起来
                    
                return texts    #返回所有指定列的内容

五、用XPATH查找元素(用手写XPATH的方法查找,而非浏览器直接右键复制,会更具灵活性)

手写xpath的方法:https://blog.csdn.net/weixin_44078196/article/details/102809973
使用POM模式编写代码,创建页面的元素集,将元素和对元素操作的逻辑分开,这样在元素发生变化的时候不用在逻辑函数里面一个个修改发生了变更的元素,只需修改元素集中的元素即可。
例子:

#元素集:
Input1=(By.XPATH,'xpaht1')
Input2=(By.XPATH,'xpath2')
Btn1=(By.XPATH,'xpath3')
Btn2=(By.XPATH,'xpath4')

#对元素的操作:(使用了第四点的通用函数)
input_text(driver,Input1)
Btn_click(driver,Btn1)
input_text(driver,Input2)
Btn_click(driver,Btn2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值