同浏览器对网页默认的组件解析样式不一致,而且不够美观,网页样式开发需要大量时间,今天介绍一款优雅的 CSS 框架。
Pico.css 是一个简单轻量化的 CSS UI 框架,最大的特点是样式都基于 HMTL 原始的标签名和内置的属性,少用甚至是不用 class 来定义样式,写出来的代码语义清晰,可维护性强,能够帮助开发者构建自己的 UI 系统,也可以直接用于快速的小型项目中。
Pico-css 官网
截止发文日期,Pico.css 在 Github 上已经有高达 3898 个 Star。
引入 Pico.css 最简单直接的方式就是下载后直接引入一个样式文件:
Pico-css cdn 引入
当然也可以通过 npm 安装:
Pico-css npm 安装
然后就可以编写 html 代码了。
想要做一个输入框和提交表单,往往需要这样的代码:
常规实现 form 表单代码
而使用 Pico.css,只需要:
Pico-css 实现表单
Pico.css 内置了很多基础的组件,包括常用表单控件、表格、弹窗、导航菜单、卡片等,代码非常简洁,比如实现一个美观的进度条,只需要这点代码:
Pico-css 实现进度条
Pico.css 内置了浅色和深色两套主题,使用方法非常简单,给父级元素添加属性data-theme。
切换主题
官网还有很多代码例子,比如编写一个美观大气的登录界面,html 代码十分简洁,仿佛回到了刚刚开始学习 html 语法的时代。
登录界面
通过 CSS 文件的源码,可以看到样式的选择器大多通过 HTML 元素标签名、内置的属性以及自定义属性来命中,这样就规避了常规的只使用 class 来区分的“命名地狱”,是一种非常好的网页编程思路。
Pico-css 源码
面向对纯粹 HTML 有极致追求的开发者,Pico.css 还提供了 classless 版本,这个版本将一个 class 都没有,完全使用元素标签名和属性编写网页。
在项目中使用 Pico.css 源自于一次快速的营销页需求,需要做简单的几个带有输入交互的页面,使用 bootstrap 这样庞大的框架显然有点笨重了,如果使用当前流行的能够按需引入的 Vue UI 组件库,又免不了要用 Vue.js 来工程化。只是做几个简单的页面,没有必要用中大型项目的标配,考虑到目前市面上大多数 UI 框架都过度封装,堆叠了很多包含各种语义的 class 名,不仅会让页面加载变慢,而且会导致更长的样式计算时间,最终还是找到了适合这样场景的 Pico.css。
css 样式的写法很自由,目前前端开发存在一个趋势,为了做精美的界面,需要花费大量的时间来写样式,为了样式可以复用,绞尽脑汁给 class 起名字,甚至网上还有各种 class 命名规范,这可能导致了大量的样式被覆盖,很多时候 class 属性的名称,甚至比样式的代码还要多,极难维护。
Pico.css 的出现给这样的开发现状提供了一种新思路,不仅可以直接用在实际项目中,也能够作为构建自己的 UI 库的基础样式。
Pico.css 是一个免费开源的项目,源码基于 MIT 开源协议托管在 Github 上,任何个人和公司都可以免费下载使用。
关注我,持续分享高质量的免费开源、免费商用的资源。
↓↓点击查看本次分享的网址。
Pico.css - 简单优雅的纯 CSS 开源 UI 框架,用原始的 HTML 元素标签来做界面|那些免费的砖
Node JS环境、Protractor工具、Jasmine框架、JavaScript语言
Protractor是作为Angular JS应用程序的测试工具,简单的理解就是驱动脚本来实现客户端到服务器端测试的一种工具,也就是我们常听到的一个词,e2e(end to end),也就是端到端的测试,其中Angular JS是一款优秀的前端开发框架,当时的开发团队就额外设计出Protractor这样一个小工具便于测试基于Angular JS开发的产品,它的构建基于Selenium WebDriver之上,所以使用起来你会发现很多方法和不同语言下的webdriver操作类似,至少形式上看上去很像,而且是围绕着Selenium WebDriver进行封装的,因此,Protractor中包含的每一个feature对于Selenium WebDriver都是可用的。但是需要注意一点,假如我设计的自动化代码并不是基于Angular JS开发的,那么就会有个疑问,是不是还可以钟情于这款框架呢,答案是肯定的,我们只需要在js代码中加入这样一行“browser.ignoreSynchronization = true”,就可以跳过Angular JS产品的验证了。当然,既然人家最初设计目的是为了测试基于Angular JS的产品,它会提供了独享的一些方法,例如waitforangular()
我们还会接触到另外一个词“Jasmine”,其实它是Protractor内部支持的三种行为驱动开发中的一种,具体有Jasmine/Mocha/Cucumber,也就是我们理解上的自动化测试框架的三种,我听过前两种,第三种没用过,而且要注意一点protractor默认使用的就是Jasmine,自动化测试框架主要是提供语法、提供流程管理模块、和报告工具,主要也就是这三点,这些框架都是基于JavaScript和Nodejs的,Nodejs就是支持javascript的运行环境。
接下来简单看下怎么搭建一个基于Protractor测试框架的测试环境,用来写我们的自动化测试代码。
第一步毫无疑问,安装Node.js,安装Node.js并不难,可以直接到 https://nodejs.org/en/ 网站上下载相应的安装包,这里选择的是windows的安装包,有的网络会下载比较慢,虽然只有12M左右(亲身经历,还会经常中断。。。)。
其中npm package manager是我们安装Node.js最为重要的目的,当然,Add to PATH是帮助我们省去了配置变量的环节,也是很重要的,安装步骤不多赘述,如果图方便的话,闭上眼睛一路Next下去就好。
安装完成后,打开命令窗口,使用命令 “npm —version” 查看Node.js是否安装成功。
由于这里需要使用pratractor,所以需要使用命令 “npm install —global protractor” 或者 “npm install -g protractor” 全局安装protractor,为什么是全局安装而不是本地安装,因为我们这里只需要使用CLI(Command Line Interface) 而不需要用require将protractor包含进去,如果需要后者,则需要再在本地安装一次,当然,如果不放心,也完全可以将全局和本地都安装一次,以后如果需要用,就可以直接用了,这里作为例子来看,只需要全局安装即可。
这时候,可以试着启用webdriver, 注意,如果这里是先做了webdriver-manager update操作,而直接输入 webdriver-manager start则会不成功,它会提示 java 不能识别,它既不是内部也不是外部命令。而紧接着才安装JDK的话,在相同的command window中也同样会持续这个提示,此时只需要重新开一个新的command window即可。
这时候可以发现,webdriver 启动了,接下来我们试着开始写case来看下是不是可以运行了。
我们一定要编写的文件只有两个,一个是configure.js,当然文件名是随意编写的,也可以叫做config.js,用做什么呢,目的有两个,一个是指定4444端口作为selenium调用服务的配置,另一个是作为执行测试用例的入口文件,也就是可以在这个文件内指定运行哪些测试用例。
代码如下:
(function () {
exports.config = {
seleniumAddres : 'http://localhost:4444/wd/hub',
specs: 'testcase.js'
}
}
)()
另一个文件也就是我们的测试用例文件,名字叫做testcase.js,当然名字也是可以用别的,代码如下(代码是可以直接运行的哦),里面有一条自动化测试用例,用于测试光宇游戏社区点击登录按钮之后,输入用户名和密码后,会出现复杂验证码弹层,也就是我们的期望值。
(function (){
var requires = require('./testdata.js')
describe('XXX_Community', function () {
var url = requires.urls.AngularJSURL
beforeEach(function() {
browser.ignoreSynchronization = true
browser.manage().window().maximize();
browser.get(url)
});
it('Account_Login_WithPassword_001', function () {
element(by.xpath('//*[@id="js_pubtoplogin_div"]/div[1]/a')).click()
element(by.id('Account')).sendKeys('xieshuyu')
element(by.id('Password')).sendKeys('xieshuyu')
var EC = protractor.ExpectedConditions;
browser.wait(EC.presenceOf(element(by.id('sigin'))), 5000);
element(by.id('sigin')).click()
expect(element(by.xpath('/html/body/div[8]')).isPresent()).toBeTruthy()
}
)
})
})()
如果有一定代码经验的同学,其实看这段代码和我们之前的自动化用例代码差别并不是很大,变化的就是形式和语言。
1、describe就是我们通常讲的自动化测试用例集,it就是自动化测试用例,两个的实质就是js方法,it当中包含了测试用例的内容,包含了操作步骤和断言;
2、如果要停止运行某一个case,只需用xit()代替it(),同理在describe前加’x’也可以停止整个describe封装的运行;
3、引号中的description用来描述case行为,便于在查看报告时理解case行为;
4、expect()用于判断结果,一个case中可以有多个expect(),只有当所有的expect()都通过的时候,这个case才可以通过,否则会提示失败,常见匹配器如下:
expect(x).toEqual(y); 当x和y相等时候通过
expect(x).toBe(y); 当x和y是同一个对象时候通过
expect(x).toMatch(pattern); x匹配pattern(字符串或正则表达式)时通过
expect(x).toBeDefined(); x不是undefined时通过
expect(x).toBeUndefined(); x 是 undefined时通过
expect(x).toBeNull(); x是null时通过
expect(x).toBeTruthy(); x和true等价时候通过
expect(x).toBeFalsy(); x和false等价时候通过
expect(x).toContain(y);x(数组或字符串)包含y时通过
expect(x).toBeLessThan(y); x小于y时通过
expect(x).toBeGreaterThan(y); x大于y时通过
expect(function(){fn();}).toThrow(e); 函数fn抛出异常时候通过
5、关于element元素的定位,常用方法如下(暂时用到这么多):
element(by.xpath(‘//*[@id=”js_pubtoplogin_div”]/div[1]/a’))
element(by.id(‘xieshuyu’))
element(by.name(‘xieshuyu’))
element(by.className(‘xieshuyu’))
element(by.model(‘xieshuyu’)) //根据ng-model名来查找元素,Angular JS专用(还记得上文提到的吗,呵呵呵)
element(by.binding(‘xieshuyu’)) //查找绑定了指定名的元素,Angular JS专用
element(by.repeater(‘xieshuyu’)) //查找指定repeater中的元素,Angular JS专用
看到这,是不是有点小兴奋了呢,哈哈哈!其实执行方式很简单,前提是环境已经配置正确了,在文件路径下切换到对应的cmd窗口,然后输入“protractor config.js —config spec —disableChecks”,记得加上—disableChecks,会避免一些不必要的检查。
然后你就可以谷歌浏览器被打开了,然后执行我们测试用例的文件,至少从视觉效果上来看,执行速度高于利用java来写的自动化代码,速度很快,但是有一个缺点,至少我理解上是这样的,我们都知道javascript是一种前端流行语言,是不支持后台操作的,就连数据库连接和执行sql语句也是不支持的,所以我们自动化流程中可能用到的数据库操作是没办法利用它实现的,但这里会有一个问题值得讨论,我们的UI端的自动化是否需要或者有必要连接后台来模拟一些用例的前提条件,以后再写另外的一篇博客来讨论吧,在这一句两句也说不清楚。
如果有同学看到这里,会不会有个疑问,也就是有没有发现我们的代码是没有任何语句来指定谷歌浏览器驱动的地方,那怎么在输入“protractor config.js —config spec —disableChecks”之后就自动打开chrome进行自动化测试了呢。其实答案就是特别简单,因为人家protractor支持的默认浏览器就是chrome,还有一点,我想到也就是nodejs环境本身就是一个基于Chrome V8引擎的。
文中提到的代码只是一个简单的自动化测试用例demo,用于说明利用NodeJS环境+Protractor工具+Jasmine框架+JavaScript语言是可以做到UI的自动化,而且效果还不错的,之后会陆续更新的。如果有什么说的不准确的地方,欢迎留言!
—————————————————————————————————————
给大家推荐一个学习资料分享群(574253227),里面大牛已经为我们整理好了许多的学习资料,有自动化,接口,性能等等的学习资料!
站和移动用户应用程序设计范围内的UI工具包是一组设计元素,例如:按钮,导航栏,字段框,下拉菜单,复选框,单选按钮,列布局,图标,等等,通常采用分层PSD格式(Adobe Photoshop)。UI套件成为用户界面设计人员在网站和移动应用程序上工作的主要弹药。UI工具包可以节省时间,并为项目提供新的参考。
*请认真填写需求信息,我们会在24小时内与您取得联系。