目的:实现了操作步骤与程序的分离以及数据与程序的分离,提高代码复用性,减少代码冗余
封装公共类:General.py、operate_file.py
General.py:主要封装功能为操作步骤方法+定位元素方法
operate_file.py:主要封装功能为读取测试步骤+读取测试数据+eval执行方法操作
业务类(Functions.py):根据功能划分方法,提高代码可读性
代码如下:
General.py代码:

from  selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import ActionChains
class Common(object):driver=""def open_browser(self,browser_name):#启动浏览器驱动global driverif browser_name.lower().strip()=="ie":driver=webdriver.Ie()elif browser_name.lower().strip()=="firefox":driver=webdriver.Firefox()elif browser_name.lower().strip()=="chrome":driver=webdriver.Chrome()else:return ("未知浏览器")driver.maximize_window()def visit_url(self,url):#获取网页源码global driverdriver.set_page_load_timeout(3)driver.get(url)def implicit_waiting(self,times):#隐式等待时间global driverdriver.implicitly_wait(int(times))def sleep_time(self,times):time.sleep(int(times))def quit(self):#关闭网页global driverdriver.quit()def location_element(self,type,element):#元素定位global driverif type.lower().strip()=="id":el= driver.find_element_by_id(element)elif type.lower().strip()=="name":el= driver.find_element_by_name(element)elif type.lower().strip()=="tag":el= driver.find_element_by_tag_name(element)elif type.lower().strip()=="class":el= driver.find_element_by_class_name(element)elif type.lower().strip()=="link_text":el= driver.find_element_by_link_text(element)elif type.lower().strip()=="partial_link":el= driver.find_element_by_partial_link(element)elif type.lower().strip()=="xpath":el= driver.find_element_by_xpath(element)elif type == "css_selector":el=  driver.find_element_by_css_selector(element)return eldef input_content(self,type,element,data):#输入数据el=self.location_element(type,element)el.clear()return el.send_keys(data)def swith_to_iframe(self,type,element):#切至iframeglobal driverel=self.location_element(type,element)return driver.switch_to.frame(el)def swith_out_iframe(self):#切出iframeglobal driverreturn driver.switch_to.default_content()def click(self,type,element):#点击事件el=self.location_element(type,element)el.click()def submit(self,type,element):#表单提交事件el=self.location_element(type,element)el.submit()def keys_enter(self,type,element):#键盘回车事件el=self.location_element(type,element)el.send_keys(Keys.ENTER)def action_chains(self,type,element):#鼠标双击事件global driverel=self.location_element(type,element)action_chains = ActionChains(driver)action_chains.double_click(el).perform()

operate_file.py代码:

import os
import re
from General import Common
class operate_file(object):def read_test_data(self,file_path):#读测试数据test_data=[]if os.path.exists(file_path):with open(file_path,"r",encoding="utf-8") as fp:temp=fp.readlines()for line in temp:test_data.append(eval(line.strip()))return test_dataelse:return Falsedef read_test_step_data(self,file_path):#读测试步骤数据test_step_data=[]if os.path.exists(file_path):with open(file_path,"r",encoding="utf-8") as fp:temp=fp.readlines()for line in temp:datalist=line.strip().split("||")templist=[]for  data in range(len(datalist)):templist.append(datalist[data])test_step_data.append(templist)return test_step_dataelse:return Falsedef eval_commands(self,operate_test_data,operate_test_step_data):General=Common()for test_data in operate_test_data:for test_step_data in operate_test_step_data:if len(test_step_data)==1:command=test_step_data[0]+"()"elif len(test_step_data)==2:command=test_step_data[0]+"('"+test_step_data[1]+"')"elif len(test_step_data)==3:command=test_step_data[0]+"('"+test_step_data[1]+"','"+test_step_data[2]+"')"elif len(test_step_data)==4:keyword="".join(re.findall(r"^\$\{(.*?)\}",test_step_data[3]))command = test_step_data[0] + "('" + test_step_data[1] + "','" + test_step_data[2] + "','"+test_data[keyword]+"')"print("General."+command)eval("General."+command)

Functions.py文件代码:

from operate_file import operate_fileclass functions(object):def __init__(self):self.of = operate_file()def login_fun(self):#登录login_test_data=self.of.read_test_data("login_test_data.txt")login_test_step_data=self.of.read_test_step_data("login_test_step_data.txt")self.of.eval_commands(login_test_data,login_test_step_data)def create_contact(self):#创建联系人create_contact_test_data = self.of.read_test_data("create_contact_test_data.txt")create_contact_test_step_data = self.of.read_test_step_data("create_contact_test_step_data.txt")self.of.eval_commands(create_contact_test_data, create_contact_test_step_data)def send_email(self):#发送邮件send_email_test_data=self.of.read_test_data("send_email_test_data.txt")send_email_test_step_data=self.of.read_test_step_data("send_email_test_step_data.txt")self.of.eval_commands(send_email_test_data,send_email_test_step_data)
if __name__=="__main__":fun=functions()fun.login_fun()fun.create_contact()fun.send_email()

运行结果:

混合驱动+封装实现163邮箱登录+创建联系人+发送邮件相关推荐

  1. 163邮箱登录后如何创建文件夹?个人邮箱文件夹怎么管理?

    163邮箱登录后如何创建文件夹?个人邮箱文件夹怎么管理? 我们注册163邮箱主要用于办公用,用一个邮箱会联系很多地区的业务,每个地区需要分别管理.跟TOM VIP邮箱售后沟通后,决定使用自定义文件夹的 ...

  2. 163vip邮箱账号登录入口在哪儿?163邮箱登录不了怎么办?

    生活不止眼前的苟且,还有诗和远方-初入职场的你可能连办公软件都不能熟练使用,邮箱登录地址不清楚怎么写.不晓得163vip邮箱账号登录入口在哪儿.不知道邮箱登录不了该怎么办.更不知道发错邮件该怎么办,到 ...

  3. selenium2与python自动化5-iframe和163邮箱登录

    Frame和iframe两者可以实现的功能基本类似,不过iframe比Frame使用起来更加灵活,Frame不能脱离frameset单独使用,而iframe可以,frame不能放在body中,否则不能 ...

  4. 163邮箱登录入口你知道吗?163邮箱登录方法大全

    随着社会科学技术的发展,我们的交流方式也变得越来越便捷,从BB机到手机,从传真到电子邮件都我们的沟通方式都发生了翻天覆地的变化,今天我们就来讲一下电子邮箱的发展, 以及几种TOM VIP邮箱登录入口的 ...

  5. 163邮箱登录入口大全,你知道163邮箱登录入口怎么登录吗?

    最近有很多朋友问我163邮箱登录入口在哪里可以找到,说是想登录163邮箱但是因为找不到163邮箱登录入口,所以迟迟登录不上自己的邮箱,那么你知道163邮箱怎么登录吗,你知道TOM VIP邮箱和免费邮箱 ...

  6. 163邮箱登录页面,如何快速登陆163邮箱?

    163邮箱登录页面在哪里,很久没有登录了,在哪里登陆163邮箱呢?TOM VIP邮箱分享几招长期记住登陆入口的方法,记得收藏哦! 163邮箱登录页面 网页地址比较难记,时间久了便会连同办公邮箱的固定格 ...

  7. vip.163邮箱登录指南,163vip邮箱体验分享

    随着互联网科技的发展,免费邮箱已不能充分满足上班族的工作需要,因此转而使用付费邮箱.下面小编带你探索深受上班族热捧的VIP邮箱,看vip邮箱如何在各个领域发挥价值. VIP邮箱使用群体 VIP邮箱主要 ...

  8. 163邮箱登录报错xm001 NO LOGIN Login error user suspended

    出现这个原因是因为没有打开163邮箱的第三方登录权限,只需要设置后就可以进行登录了. 设置步骤 1.进入设置页面 2.启用IMAP/SMTP服务 和 POP3/SMTP服务 开启后既可正常登录,如果出 ...

  9. Python+selenium 实现自动化163邮箱登录并发送邮件

    啊!终于写出来了,定位好久,终于都弄完了.但是有时候又发送不成功有时候又可以,不知道是我暂停时间太短,还是其他什么原因.记录一下吧~ 定位时注意一下动态的iframe ''' 自动登录163邮箱,并发 ...

最新文章

  1. ThinkPHP + Ajax 实现2级联动下拉菜单
  2. Scrum中如何实现一个Sprint?
  3. vb+socket 编写入侵监听程序
  4. Android studio .gitignore 文件的内容
  5. 解决.NET Core中MailKit无法使用阿里云邮件推送服务的问题
  6. P1282-多米诺骨牌【dp,背包】
  7. 华为王军:未来座舱操作系统只有1个或者2个生态
  8. 国内首部Sharepoint 2010深入开发(工作流+安全性+单点登录+AD开发、认证等)
  9. eclipse安装与概述
  10. 计算机编程ebcdic码,ASCII码和EBCDIC码
  11. 如果在魔兽世界中,做一个合格野性德
  12. 一个不超过200行的游戏
  13. 笔记13-1(C语言 三子棋)
  14. SAP R3 系统技术基础
  15. 医疗卫生信息化领域的一些术语和标准
  16. ArcGIS制作矢量动图
  17. UI设计师具备四大维度能力剖析
  18. 使用易语言实现远程CALL调用
  19. B. Tournament
  20. 贵州省毕节市谷歌卫星地图下载

热门文章

  1. ie浏览器下载地址(官网地址)
  2. 基于PHP网上考试系统,试卷、试题——基于php网上考试系统.doc
  3. switch服务器帐户注销,堡垒之夜NS版Guest账号怎么更换_Guest账号退出更换方法介绍...
  4. AltiumDesigner覆铜挖空技巧总结
  5. html+css实现多层表格嵌套
  6. 搜索引擎技术Lucene
  7. IDEA右下角git图标上消失,如何重现?
  8. gentoo virtual couldnt download
  9. 非常不错的地区三级联动,js简单易懂。封装起来了(转)
  10. FineUI大版本升级,外置ExtJS库、去AXD化、表格合计行、表格可编辑单元格的增删改、顶部菜单框架...