2019独角兽企业重金招聘Python工程师标准>>> hot3.png

from selenium import webdriver
import time
import os
from selenium.webdriver.common.action_chains import ActionChains
from logs.logger import Logclass Login_xzt(object):log = Log()driver = webdriver.Chrome()driver.maximize_window()def login_yunying_xzt(self):self.driver.get("http://192.168.0.201:8038/coms/a")  # 打开运营平台201self.log.info("打开运营201:8038管理后台")self.driver.implicitly_wait(5)  # 设置等待时间self.driver.find_element_by_id("username").clear()self.driver.find_element_by_id("username").send_keys("civa")self.log.info("输入用户名")try:self.driver.find_element_by_id("password").clear()self.log.info("username is cleaned")except Exception as e:self.log.info("Exception found", format(e))self.driver.find_element_by_id("password").send_keys("123456")self.log.info("输入密码")self.driver.find_element_by_class_name("btns-lock").click()self.log.info("点击登录")try:assert self.driver.find_element_by_xpath("//*[contains(text(),'您好, 运营人员')]").is_displayed()self.log.info("运营人员登录成功")except Exception as e:self.log.info("运营人员登录未成功")self.driver.find_element_by_xpath("//*[contains(text(),'Civa校长通')]").click()  # 登录后点击校长通列表self.log.info("点击校长通列表")self.driver.switch_to.frame("mainFrame")self.log.info("切换进入主表层")def creat_recordTv(self):time.sleep(2)a = self.driver.find_element_by_xpath("//span[text()='视频学习']")self.log.info("点击视频学习")ActionChains(self.driver).double_click(a).perform()time.sleep(2)self.driver.find_element_by_xpath("//span[text()='人资管理']").click()self.log.info("点击人资管理")self.driver.switch_to.frame("schoolClassaContent")self.log.info("切换进入二层框架")self.driver.find_element_by_xpath("//*[contains(text(),'内容添加')]").click()self.log.info("添加内容")self.driver.find_element_by_xpath("//*[@id='s2id_courseAttribute']/a/span[2]/b").click()self.log.info("点击课程类型下拉框")self.driver.find_element_by_xpath("//*[contains(text(),'录播课')]").click()self.log.info("选中录播课")self.driver.find_element_by_id("courseName").send_keys("录播UItest829")self.log.info("输入课程名称")self.driver.find_element_by_id("teaching").send_keys("七月大人")self.log.info("输入老师名称")self.driver.find_element_by_id("courseSimpleDesc").send_keys("202UI自动化测试")self.log.info("输入课程简介")self.driver.switch_to.frame(self.driver.find_element_by_tag_name("iframe"))self.log.info("切换进入第三层")self.driver.find_element_by_class_name("CSS1Compat").send_keys("终于定位到富文本编辑测试啦")self.log.info("在富文本框内输入")self.driver.switch_to.parent_frame()  # 返回上一层iframeself.log.info("返回上一层框架")self.driver.find_element_by_xpath("//div[text()='选择文件']").click()self.log.info("选择文件")os.system(r"C:\Users\24661\Desktop\windowsScrip.exe")  # 执行文件上传脚本self.log.info("执行文件上传脚本")self.driver.find_element_by_id("price").send_keys("0.0")self.log.info("课程价格设置")self.driver.find_element_by_id("btnSubmit").click()  # 保存self.log.info("保存课程")self.driver.switch_to.default_content()self.log.info("退出iframe")self.log.info("浏览器version   " + self.driver.capabilities['version'])  # 打印浏览器version的值self.log.info("当前页面的URL   " + self.driver.current_url)  # current_url 方法可以得到当前页面的URLself.log.info("执行脚本时间    " + time.ctime())self.driver.quit()if __name__ == "__main__":login = Login_xzt()login.login_yunying_xzt()login.creat_recordTv()

第一次python,语法上跟java区别还挺大,这次写的是一个后台配置功能,主要两个学习点,一个是iframe的层级切换,另一个就是折磨我很久的文件上传(非input标签),借助autoit工具生成脚本,然后放到代码中运行,具体操作办法可以参考这篇:https://www.cnblogs.com/BlueSkyyj/p/7523844.html

然后另一个小小的成就就是添加了日志的部分,之前用的python版本是3.5.2,运行日志代码失败,更新了3.7版本,成功,无解,就是这么尴尬

# coding:utf-8
import logging
import time
import os# log_path是存放日志的路径
cur_path = os.path.dirname(os.path.realpath(__file__))
log_path = os.path.join(os.path.dirname(cur_path), 'logs')
# 如果不存在这个logs文件夹,就自动创建一个
if not os.path.exists(log_path): os.mkdir(log_path)class Log():def __init__(self):# 文件的命名self.logname = os.path.join(log_path, '%s.log' % time.strftime('%Y%m%d%H%M%S'))self.logger = logging.getLogger()self.logger.setLevel(logging.DEBUG)# 日志输出格式self.formatter = logging.Formatter('[%(asctime)s] - %(filename)s] - %(levelname)s: %(message)s')def __console(self, level, message):# 创建一个FileHandler,用于写到本地#fh = logging.FileHandler(self.logname, 'a')  # 追加模式  这个是python2的fh = logging.FileHandler(self.logname, 'a', encoding='utf-8')  # 这个是python3的fh.setLevel(logging.DEBUG)fh.setFormatter(self.formatter)self.logger.addHandler(fh)# 创建一个StreamHandler,用于输出到控制台ch = logging.StreamHandler()ch.setLevel(logging.DEBUG)ch.setFormatter(self.formatter)self.logger.addHandler(ch)if level == 'info':self.logger.info(message)elif level == 'debug':self.logger.debug(message)elif level == 'warning':self.logger.warning(message)elif level == 'error':self.logger.error(message)# 这两行代码是为了避免日志输出重复问题self.logger.removeHandler(ch)self.logger.removeHandler(fh)# 关闭打开的文件fh.close()def debug(self, message):self.__console('debug', message)def info(self, message: object) -> object:self.__console('info', message)def warning(self, message):self.__console('warning', message)def error(self, message):self.__console('error', message)if __name__ == "__main__":log = Log()log.info("---测试开始----")log.info("操作步骤1,2,3")log.warning("----测试结束----")

运行结果页面如下 :

70e6ce9148e1d0ce76bffd9a0ce9e50fb94.jpg

转载于:https://my.oschina.net/EvanDev/blog/2054697

第一个python_ UI case相关推荐

  1. 如何构建一个理想UI代码表达的自动化工具?

    作者:闲鱼技术-吉丰 基于设计师产出的 Sketch,甚至是一张 PNG,就能自动生成高可维护可扩展的 UI 代码,质量堪比一位资深前端工程师, 一定是一件让整个大前端领域都为之尖叫的事情. 出于这样 ...

  2. 使用Java语言编写一个五子棋UI界面并实现网络对战功能(非局域网)

    使用Java语言编写一个五子棋UI界面并实现网络对战功能(非局域网) 一,前期准备 1,Java IDE(Eclipse)与JDK的安装与配置 jdk-15.0.1-免配置路径版 提取码:earu 免 ...

  3. 用Qt在Iinux上开发一个带UI的工业控制系统,应该用C++还是QML

    用Qt在Iinux上开发一个带UI的工业控制系统,应该用C++还是QML? 之前有人推荐说要用QML,QtQuick来开发.可是学习了一段时间对于QML和C++的混合编程还是不甚理解,觉得还是应该用C ...

  4. 当Eclipse无法新建一个JUnit Test Case时,可解决的办法

    已经在Eclipse上安装了JUnit环境,可是导入Jeesite工程后想在其StringUtils类文件下新建一个JUnit Test Case文件,发现右键new找不到该类型的文件 则可以点击Ot ...

  5. 当设计一个APP UI的时候我们想什么...

    当设计一个APP UI的时候我们想什么... 有句话说在前面--好看就是生产力,在app中是真实存在的. 品牌篇 图标篇 排版篇 微场景篇 动画篇 交互篇 一.品牌篇 品牌色从大的来说是VI需要优先考 ...

  6. android碎片调用动态碎片,Android Training - 使用碎片创建一个动态UI

    为了能够在Android中创建动态和多窗口的用户界面,你需要封装UI组件和activity行为在不同的模块中,以便你可以在不同的activity间切换.你可以使用Fragment类创建这些模块,类似于 ...

  7. 第二十二:第一个Pytest UI自动化测试实战实例

    环境准备 项目简介 测试地址 https://mail.126.com 测试范围 1.126电子邮箱登录功能测试-验证正确帐号密码登录成功-验证错误用户名密码登录失败(有很多情况,用例里面做了充分的校 ...

  8. html如何既能应用于pc端也能用于手机端_如何选择一个 vue ui 框架?

    目录 1,比较流行的 UI 框架有哪些? 1.1 适用 PC 端 1.2 适用移动端 1.3 其它 2,vuetify 是什么,为什么选择它? 2.1 Vuetify给出的 vue ui 框架对比图 ...

  9. 手把手实现一个element ui 的message

    写在前面 相信很多用过前端UI框架的同学都用到过一些全局通用的 提示,像element的this.message,还有vant的this.message ,还有vant的this.message,还有 ...

最新文章

  1. 生成随机验证图片--ASP.NET中常用代码之二
  2. PAT甲级1017 Queueing at Bank:[C++题解]字符串、结构体、最小堆
  3. awk使用shell中的变量
  4. LeetCode 553. 最优除法(数学)
  5. Source Server + Symbol Server
  6. hdfs中与file数组类似的数组_如何在 JavaScript 中克隆数组
  7. java定时器克隆方式,Java-DropWizard指标计量器与计时器
  8. Golang时间格式化
  9. Python3基础3——List列表的增删改和内建函数的用法
  10. 【报告分享】零售行业三大平台之对比分析-阿里VS京东VS拼多多:分级、竞争、进化.pdf...
  11. 读取Apache访问日志,查看每一个独立客户端连接获得的字节数
  12. 华为鸿蒙生态伙伴,华为鸿蒙生态加速 市场相关板块再度活跃
  13. 数据挖掘概念与技术(原书第三版)范明 孟小峰译-----第六章课后习题答案
  14. xrd精修教程_一文详解XRD精修的应用
  15. 体悟朝闻道,夕死可以
  16. 剑网三插件入门教程(2):在游戏中调试Lua代码
  17. 【目标检测】Receptive Field Block Net for Accurate and Fast Object Detection论文理解
  18. win10更改mysql密码_win10 修改mysql密码忘了怎么办
  19. 渗透靶场——HackMyVM:BlackWidow
  20. 【推荐】mysql联合 索引(复合索引)的探讨

热门文章

  1. 大量的QT控件及示例发放,求泛滥
  2. 抱歉,由于某种原因,PowerPoint 无法加载 ...加载项(Office2016x64)
  3. 关于《One day》
  4. 14.常见对象(正则表达式,Pattern和Matcher类,Math类,Random类,System类,BigDecimal类,Date类,SimpleDateFormat类,Calendar类)
  5. 直击2023云南移动生态合作伙伴大会,聚焦云南移动的“价值裂变”
  6. 网易邮箱大师更新:聚焦于提升移动端的附件取用体验
  7. 蓝桥杯C/C++VIP试题每日一练之高精度加法
  8. 嵌入式工控机主板与计算机PC主板的区别
  9. CRM客户管理系统不被销售接受的五大原因
  10. CODEFORCES 377A