首页 文章 精选 留言 我的

精选列表

搜索[webui],共367篇文章
优秀的个人博客,低调大师

webTest-----webUI自动化框架

webTest框架介绍 地址 https://github.com/wuranxu/webTest 希望大家能够喜欢!!! 简介 本框架基于Python3+selenium3+unittest组成,用户以Page Object的模式编写用例。元素的定位和操作按照页面划分,达到Web端自动化回归测试的目的,并生成测试报告。浏览器兼容性暂时未完善。 本例子展示了一个必应首页搜索"龙珠超"的测试用例,比较简陋。 运行日志 过程截图 效果展示 快速上手 从远程仓库拉取代码 git clone https://github.com/wuranxu/webTest.git 安装依赖包 进入下载好的webTest目录,并在此目录运行install.py mac/Linux: python3 install.py windows: python install.py 运行demo 在webTest目录输入命令(确保chrome浏览器已安装, 驱动会自行下载): python run_case.py 环境配置 注: 无桌面版Linux目前只做到支持firefox os: Windows/Mac os x/Linux Python3.x Chrome浏览器 目录结构 project └───ErrorPic | └───DataBase | └───Log | └───Xmind | └───Page | └───Report | └───Page | └───TestSuite | | base_case.py | └───templates | | report_templates.html └───TestResult | | report_templates.html | | GenerateReport.py | | Result.py | └───chromedriver │ │ chromedriver.exe | └───Tools | | chrome.py | | decorator.py | | driver.py | | logger.py | | web_tool.py | │ README.md │ run_case.py | requirements.txt │ config.py | webdriver_test.log 内容介绍 chromedriver 存放chromedriver驱动, 若本机未安装chromedriver则自动匹配本机chrome版本下载对应驱动。 DataBase 存放Mysql和Mongodb的连接类 ErrorPic 存放出错截图, 目前根据用例名称创建文件夹并存放。 Log 存放所有日志文件, 目前只有webdriver_test.log, 主要目的是将日志区分开来。 Page 页面目录, 可扩展, 针对不同模块的页面可设计不同目录结构。一般存放该页面的操作(Action)以及元素(Location), 用例具体断言不建议写于此处(因人而异)。 Report 存放测试报告,为html形式,可右键通过浏览器打开,使用chrome效果尤佳。 templates 存放html模板,传入测试结果以生成测试报告。 TestResult GenerateReport.py 是组织测试结果, 生成测试报告, 填入数据至html报告模板的方法。 Result.py 继承自unittest.TextTestResult类, 存放测试结果。 TestSuite 测试套件目录, 可扩展, 子目录为某个测试集。测试集中存放测试用例。 base_case.py 存放基础测试用例。 Tools chrome.py 用于更新/下载chromedriver, 目前只支持mac os和windows系统。 decorator.py 用于存放自动截图/重跑等装饰器, 主要是为测试函数添加错误截图以及重跑等功能。 driver.py 继承自WebDriver类, 主要用于简化原生api以及添加切换frame/handle等api。 logger.py 记录日志的功能函数。 web_tool.py 用于Web自动化测试的工具类, 包括截图、获取用例等方法。 xmind_reader.py 用于解析xmind文件,暂时不支持过于复杂的xmind。用例的大概编写方式如下图。 Xmind 存放Xmind文件, xmind文件用于编写测试用例。 config.py 用于存放绝大部分配置。继承于BaseConf类, 可拥有自己的配置。 requirements.txt 用于存放本框架所需库。 run_case.py 存放组织用例, 生成测试套件, 运行测试用例等函数。 webdriver_test.log 存放测试用例执行时候的有关操作和错误信息等。 注: 以上目录结构/命名可能并不合理, 还望海涵。 使用手册 以下内容若已安装, 可跳过。 安装Python3 Python3.6下载地址 下载对应操作系统的Python版本并安装。 下载IDE(非必须) 推荐Pycharm Pycharm下载地址 安装必须的库 目录中有install.py, 安装好Python之后, 在终端窗口中输入如下命令: Linux/mac: python3 install.py windows: python install.py 注意: 安装时需要带上install.py路径或者进入该文件所在目录。 Pycharm配置(若有) 第一步: 配置项目Python环境 File->Open 选择webTest目录, 点击窗口右下角的Open 打开Preferences, 在Project Interpreter里选择刚才安装Python的地址, 点击OK 第二步: 配置run_case.py 点击Edit Configurations 如果没有Python配置的话, 点击图中"+"图标, 然后选择Python并添加 配置脚本 第三步: 运行用例 右击run_case.py, 选择Run则为运行模式, Debug则为调试模式 用例编写规则 Python: 可参考Search.py编写用例(最好用例的类名不重复) 用例需要写在TestSuite/测试集/这种目录下 用例需要继承base_case.py 用例需要以test开头如test_bmp 用例的test函数需要带上screenshot的装饰器, 不带无截图功能 报告会按照时间生成, 且会写入2份report.html 日志在webdriver_test.log查看 Page页面编写此页面需要的操作及元素 Location类是封装了WebElement, 其中包含name, value, 默认以css方式定位 Location类实例化的时候可指定第三个参数, 方便使用其他定位的同学。如: menu = Location("大后台左侧菜单", ".menuItem", "XPATH") Xmind: 画布(必填) 为TestSuite名, 可允许重复画布名 根元素(必填) 为用例的Class名 描述(最好有) 为该用例的测试点 页面(必填) 需要填写Page下的页面, 子节点为其页面下需要用到的方法, 方法后如果还有子节点,则为该方法返回值, 若有多个返回值则用;分割且该返回值会被保留方便做断言 跳过(不填默认生成用例) 不为True的时候均会生成用例 重跑次数(可选) 用例若失败, 重新运行的次数, 默认为0。 步骤(必填) 子节点为页面方法或断言, 若以assert开头则为断言, 否则则判断为方法, 若在页面中忘了填写该方法, 则调用系统内部方法。 方法节点的子节点为参数, 同样以;分割。 断言的子节点为2或3个, 如assertEqual, 可理解是A==B?true:msg, 最后一个参数是msg, 具体出错原因。 已知缺陷 截止到现在还未支持非页面方法调用如print; 不支持导入本用例需要的其他类库; 其他不爽的有待补充。 亮痛点 浏览器驱动 问题: 浏览器驱动偶尔会与浏览器对应不上 解决方案: 自动下载, 但只针对mac/win下的chrome, 且版本不能太低。firefox不支持, 任性。 集成jenkins 问题: centos6.x不带桌面无法运行UI自动化用例 解决方案: phantomJs(不合适, 还是要写出来) 新版selenium使用的时候会提示被废弃, 建议用无头模式取代, 且运行不稳定。 Chrome无头模式(centos7以上应可行) 由于jenkins所在机器centos6.x版本过低, 被Chrome放弃支持, Chrome浏览器无法安装 Firefox无头模式(目测不可行, 测太多次了记不住) Firefox可正常安装, 但是geckodriver比较挑浏览器版本, 多次试验不成功, 换了无数个浏览器版本+geckodriver版本后已经忘了是否可行。 Firefox+虚拟桌面(目前解决方案) 见用例driver.py文件。但不完美, 错误截图显示的网页内容都····一言难尽, 好像一个瞎子终于重获光明却发现自己满脸麻子。回到正题, 为什么不自动同步firefox驱动, 因为在c方案卡壳太久比较恶心。 版本信息: geckodriver0.16 selenium>=3.4 firefox52.0 测试报告 由于邮件不支持js和引入的css, 导致报告巨难看。所以采用了附件形式, 目前是个比较大的痛点。 Page Object 关于po, 确实也没有很深的研究, 只等小白鼠试水了。 api封装 api封装得还不够多, 除了常用方法以外。但是基本上每个方法都插入了显示等待, 大大降低了元素找不到, 点不到, 各种不到的可能性。 重跑 解决了使用装饰器重跑用例不执行setUp+tearDown的问题。 错误截图 截图用base64保存, 所以只有错误的时候才会截图。因为base64太大。 Xmind编写用例 这算一个小亮点吧。 自动化配置环境 已完成, 方便使用。 数据库 支持mongo和mysql。 执行效率 目前是单线程, 还没做多线程, 时间紧迫。所以在jenkins那台老爷机比较慢, 如果用例多起来了肯定是不行的。 代码规范/质量 写得一塌糊涂, 大家看不过去就帮忙改了吧, 跪谢orz

优秀的个人博客,低调大师

带 WebUI 的开源 Rust 任务调度软件 v1.0.0 正式发布

一个用 rust 编写的开源高性能,可扩展,动态配置的任务调度器,支持同时推送用户脚本到数以万计的实例运行,并实时收集执行的结果。 jiascheduler 执行脚本的节点不需要都在同一个网络,其内部设计了一个精巧的网络穿透模型可以用一个控制台管理不同子网的节点;举例,你可以在https://jiascheduler.iwannay.cn同时往腾讯云, 阿里云,亚马逊云推送脚本执行,当然你可以往家里的电脑部署脚本执行。 为了方便对节点进行管理,jiascheduler 同时提供了一个功能强大的 webssh 终端,支持多会话操作,分屏,上传,下载等。 Github 地址:https://github.com/jiawesoft/jiascheduler 架构图 快速开始 💖 jiascheduler 下载点击这里 💖 https://jiascheduler.iwannay.cn访客账号:guest 密码:guest 此时 guest 账号下并没有在线的节点,你可以自己部署 Agent,部署成功的 Agent 将自动接入 jiascheduler 在线控制台,你可以在控制台查看 Agent 的状态,执行脚本,查看执行结果。 # 仅使用作业调度能力 ./jiascheduler-agent --comet-addr ws://115.159.194.153:3000 --assign-username guest --assign-password guest # 使用作业调度能力和webssh能力 ./jiascheduler-agent --comet-addr ws://115.159.194.153:3000 --assign-username guest --assign-password guest --ssh-user your_ssh_user --ssh-port 22 --ssh-password your_ssh_user_password --namespace home 如果你需要下线节点,只需要退出 Agent 即可 完整安装 安装 jiascheduler-console # Usage: jiascheduler-console [OPTIONS] # Options: # -d, --debug if enable debug mode # --bind-addr <BIND_ADDR> http server listen address, eg: "0.0.0.0:9090" # --config <FILE> where to read config file, you can temporarily overwrite the configuration file using command-line parameters [default: ~/.jiascheduler/console.toml] # -h, --help Print help # -V, --version Print version # 首次安装需要指定--bind-addr,服务启动后访问0.0.0.0:9090,进入安装界面,按提示完成安装 ./jiascheduler-console --bind-addr 0.0.0.0:9090 安装 jiaschduler-comet # Usage: jiascheduler-comet [OPTIONS] # Options: # -d, --debug if enable debug mode # -b, --bind <BIND> [default: 0.0.0.0:3000] # -r <REDIS_URL> [default: redis://:wang@127.0.0.1] # --secret <SECRET> [default: rYzBYE+cXbtdMg==] # -h, --help Print help # -V, --version Print version # 设置comet监听地址,secret则采用默认值 ./jiascheduler-comet --bind 0.0.0.0:3000 安装 jiascheduler-agent # Usage: jiascheduler-agent [OPTIONS] # Options: # -d, --debug # If enable debug mode # -b, --bind <BIND> # [default: 0.0.0.0:3001] # --comet-addr <COMET_ADDR> # [default: ws://127.0.0.1:3000] # --output-dir <OUTPUT_DIR> # Directory for saving job execution logs [default: ./log] # --comet-secret <COMET_SECRET> # [default: rYzBYE+cXbtdMg==] # -n, --namespace <NAMESPACE> # [default: default] # --ssh-user <SSH_USER> # Set the login user of the instance for SSH remote connection # --ssh-password <SSH_PASSWORD> # Set the login user's password of the instance for SSH remote connection # --ssh-port <SSH_PORT> # Set the port of this instance for SSH remote connection # --assign-username <ASSIGN_USERNAME> # Assign this instance to a user and specify their username # --assign-password <ASSIGN_PASSWORD> # Assign this instance to a user and specify their password # -h, --help # Print help # -V, --version # Print version # 使用作业调度能力和webssh能力 # ssh相关配置也可以不传,稍后可以在控制台直接配置 ./jiascheduler-agent --comet-addr ws://115.159.194.153:3000 --assign-username guest --assign-password guest --ssh-user your_ssh_user --ssh-port 22 --ssh-password your_ssh_user_password --namespace home 软件截图 帮助视频 https://www.bilibili.com/video/BV19wzKYVEHL

优秀的个人博客,低调大师

SAP UI5和CRM WebUI的View和Controller是如何绑定的

UI5 例如我在UI5的界面上画一个按钮,点击之后弹出一个Alert dialog。 在XML view里只定义了controller的名称和事件处理函数的名称。那么按钮被点击之后,controller的onShowHello被触发。但是,这个controller的实例是什么时候被创建, 并且关联到这个申明它的XML view里呢? 在XMLView.js里,我定义的XML view的源代码被加载之后,XMLView会调用XMLTemplateProcessor, 解析XML view的内容,根据里面的control申明创建对应的UI5控件实例。下图的变量_xContent.innerHTML即为上图XML view的源代码。 XMLView的实例通过工厂模式创建之后,XMLView源代码里定义的controller名称sap.ui.demo.walkthrough.controller.App,会赋到oView实例的字段_controllerName上。 View和Controller的绑定是通过这个方法createAndConnectController完成: connect controller to view after controller and control tree are fully initialized Controller的实例也通过工厂模式创建: 一旦connectToView执行之后, oView和oController的关联关系就建立起来了。 CRM WebClient UI 每个UI component view里有一个built-in的属性controller, 指向这个view对应的controller实例。 在BSP的编程环境里,开发人员根本无需操心这个controller实例的初始化,直接用就行。 那么View的controller实例究竟在什么时候被框架初始化的? 要自己搞清楚这个问题,可以随便找个BSP UI component做个实验。我找的是PRDHS。在其View的controller CL_PRDHS_HEADER_IMPL的构造函数里设置断点: 打开该view,从调用栈上下文即可得知BSP框架在什么地方初始化controller实例的。记下这个实例在ABAP runtime的地址编号4633: 同UI5逻辑类似,在CL_BSP_PAGE_BASE~CREATE_PAGE内部,第190行创建controller的实例并将其同View实例建立关联关系。 最后运行时View的controller实例4633和之前我们在PRDHS/Header的controller CL_PRDHS_HEADER_IMPL的构造函数中的me指针4633一样,证明两个变量指向的是同一个实例。 要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册