Skip to content

Instantly share code, notes, and snippets.

View fhferreira's full-sized avatar
🏠
Home-Office since 2005

Flávio H. Ferreira fhferreira

🏠
Home-Office since 2005
View GitHub Profile

Selenium é uma ferramenta de apoio às necessidades de testes em aplicações web. Altamente flexível, permite muitas opções para a localização de elementos de interface no navegador e simular comportamentos reais de um usuário. A versão 2.0 tem como funcionalidade primária a integração da API WebDriver. Projetado para fornecer uma interface ainda mais simples, concisa e orientada a objeto, o que melhora de forma significativa o suporte aos problemas complexos que são enfrentados ao testar uma aplicação web.

Essa API pode ser chamada através de diversas linguagem de programação, porém, em nosso exemplo, iremos utilizar o NodeJS (JavaScript), que pode ser baixado no site oficial e que possui um gerenciador de pacotes (Node Package Manager – NPM), o qual permite a interação com um repositório online via linha de comando, facilitando a instalação de várias outras ferrament

BrowserStack é uma plataforma de teste que possibilita realizar testes automáticos ou manuais em aplicações móveis e web em diversos navegadores, incluindo navegadores como Internet Explorer, Opera, Safari, Android, iPhone, Chrome etc. Plataforma bastante parecida com o SauceLabs, mas infelizmente não possui nenhum plano gratuito, só há um curto período para teste (o suficiente para podermos fazer um pequeno experimento).

Essa plataforma permite executar os testes em diversas linguagem de programação, porém, em nosso exemplo, iremos utilizar o NodeJS (JavaScript) e o Node Package Manager (NPM), que podem ser baixados no site oficial. É necessário o NPM para instalar o Karma, o PhantomJS e o WD, digitando o seguinte script no terminal:

npm install -g cucumber phantomjs

npm install wd

O NodeJS possui dois tipos de de

'use strict';
module.exports = (function() {
var Calculadora = {
somar: function() {
var soma = 0, i = undefined;
for( i=0; i < arguments.length; i++ )
soma += arguments[i];

História de usuário é uma descrição resumida de alguma funcionalidade do sistema sob o ponto de vista do usuário. Cada história deve ter valor de negócio na visão do cliente e é uma pequena parte da funcionalidade, não necessariamente uma especificação completa, o que minimiza a necessidade de uma extensa documentação.

A história de usuário é escrita pelo próprio cliente e, também, serve para conduzir a criação de teste de aceitação, o qual tem o propósito de avaliar a qualidade externa do produto e, na medida do possível, a qualidade de uso e experiência do usuário. A automatização dos testes de aceitação é criada para certificar de que a história foi implementada corretamente.

Nesse exemplo é preciso a instalação do NodeJS e do Node Package Manager (NPM), que podem ser baixados no site oficial. O NPM é necessário para instalar o CucumberJS, o PhantomJS e o WD, digitando o seguin

A programação assíncrona possui a vantagem de gerar códigos perfomáticos. Em certos casos, a implementação de diversas funções assíncronas encadeadas através de funções callback pode prejudicar a leitura e a manutenção do código. Para demonstrar esse encadeamento, vamos utilizar um trecho de código que utiliza a API do Selenium 2. Baseado em um exemplo do site do SauceLabs.

A API do Selenium WebDriver pode ser utilizada por diversas linguagem de programação, porém, em nosso exemplo, iremos utilizar o NodeJS (JavaScript) e o gerenciador de pacotes NPM, que podem ser baixados no site oficial. O NPM é necessário para instalar o PhantomJS e o WD, utilizando o seguinte script:

npm install -g phantomjs

npm install wd

O NodeJS possui dois tipos de dependências: global ou local. Quando uma dependência é

curl_setopt($ch, CURLOPT_COOKIE, ...); // -b
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); // -X
curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: image/png']); // -H
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); // -0
## Install ISPCOnfig3 + Nginx + OTRS + OpenSUSE 12.2
## Howto instal ISPConfig3
## http://www.howtoforge.com/perfect-server-opensuse-12.2-x86_64-nginx-dovecot-ispconfig-3
## Install Nginx 1.5
wget http://download.opensuse.org/repositories/home:/microchip8:/branches:/server:/http/openSUSE_12.2/x86_64/nginx-1.5.6-55.1.x86_64.rpm
zypper in nginx-1.5.6-55.1.x86_64.rpm
usermod -A www nginx

Por estar envolvido diretamente com várias comunidades de desenvolvedores, de diversas linguagens, vejo, com frequência, uma série de dificuldades de entendimento por parte dos mais novos (leia-se iniciantes em programação). Essa dificuldade de entendimento, normalmente, está relacionada com uma confusão em relação ao objetivo real do desenvolvimento de software.

Programar, ao contrário do que os mais novos pensam, não se trata de escrever códigos. De fato, trata-se de percepção com o objetivo puro e simples de se resolver problemas. O código é apenas uma, entre as várias atribuições do programador e, acreditem, não é a mais importante.

Digo que não é a mais importante, pois o código é apenas a aplicação de uma linguagem. Porém, quando se percebe que uma linguagem é apenas uma ferramenta, dentre várias ferramentas que podem ser utilizadas, compreende-se que o código naquela linguagem é equivalente ao serrote utilizado pelo marceneiro.

Alguém aqui definiria um marceneiro como um cara que sabe usar um serrot

(function (ko, handlers, unwrap, extend) {
"use strict";
extend(handlers, {
href: {
update: function (element, valueAccessor) {
handlers.attr.update(element, function () {
return { href: valueAccessor() };
});
}
},

My Validation Base Class

I was asked how I deal with validation / create and update validation rulesets. Well here is one method I have used. Don't be afraid to build on top of what the framework has already given you. In my projects I use a base class for almost anything. You never know when you want your classes to inherit some common functionality. My BaseValidator actually has some pretty useful methods and properties in it.

<?php

namespace FooProject\Internal\Validators;

use FooProject\Internal\Sanitizers\BaseSanitizer;