O documento descreve um treinamento sobre automação de testes com Selenium WebDriver. Ele apresenta informações sobre o instrutor Rodrigo Branas, incluindo sua experiência e realizações, e fornece detalhes sobre o processo de instalação do Selenium e como usar seus principais recursos, como navegar entre páginas e localizar elementos na página.
5. Rodrigo Branas
rodrigo.branas@agilecode.com.br
http://www.agilecode.com.br
• Empreendedor, Comercial, Designer e
Desenvolvedor na Kaptec e Gennera
• Empreendedor e Instrutor na Agile Code
7. Estatísticas
+6 anos
+100 palestras em eventos
+10.000 pessoas já assistiram
+50 turmas realizadas
+1000 desenvolvedores treinados
9. Rodrigo Branas
rodrigo.branas@agilecode.com.br
http://www.agilecode.com.br
• Empreendedor, Comercial, Designer e
Desenvolvedor na Kaptec e Gennera
• Empreendedor e Instrutor na Agile Code
10. Rodrigo Branas
rodrigo.branas@agilecode.com.br
http://www.agilecode.com.br
• Empreendedor, Comercial, Designer e
Desenvolvedor na Kaptec e Gennera
• Empreendedor e Instrutor na Agile Code
• Autor na PacktPub e Java Magazine
13. Rodrigo Branas
rodrigo.branas@agilecode.com.br
http://www.agilecode.com.br
• Empreendedor, Comercial, Designer e
Desenvolvedor na Kaptec e Gennera
• Empreendedor e Instrutor na Agile Code
• Autor na PacktPub e Java Magazine
14. Rodrigo Branas
rodrigo.branas@agilecode.com.br
http://www.agilecode.com.br
• Empreendedor, Comercial, Designer e
Desenvolvedor na Kaptec e Gennera
• Empreendedor e Instrutor na Agile Code
• Autor na PacktPub e Java Magazine
• Palestrante em eventos de universidades
e empresas
15. Qual é o problema em não ter de
testes automatizados?
37. Selenium é uma das ferramentas mais
conhecidas e utilizadas da atualidade para
realizar a automação de testes de aceitação
em aplicações web por meio da utilização
do browser.
48. Maven
Criando seu primeiro projeto Selenium
mvn archetype:generate
Escolhar um tipo de projeto padrão
49. Maven
Criando seu primeiro projeto Selenium
mvn archetype:generate
Escolhar um tipo de projeto padrão
Definir as 3 informações fundamentais que identificam
um artefato no Maven: groupId, artifactId e version
59. Implementação responsável por
interagir com os browsers. O Selenium
fornece suporte para os principais do
mercado como: Firefox, IE, Chrome,
Opera e até Android e iOS.
61. Driver já incluido na biblioteca principal
do Selenium e funciona baseado em
uma extensão (xpi) que é adicionada
ao Firefox no momento em que um
FirefoxDriver é instanciado.
62. 1. @Test
2. public void testarPaginaComFirefox() {
3. FirefoxDriver driver = new FirefoxDriver();
4. // continuação do teste...
5. }
66. Classe WebDriver
Abstração de um browser, implementada por meio de
drivers: FirefoxDriver, ChromeDriver, entre outros...
get(url) – Carrega uma página
getCurrentUrl() – Retorna a url
getPageSource() – Retorna o código fonte da página
getTitle() – Retorna o título da página
close() – Fecha o browser
67. 1. @Test
2. public void deveEntrarEmUmaPagina() {
3. FirefoxDriver driver = new FirefoxDriver();
4. }
68. 1. @Test
2. public void deveEntrarEmUmaPagina() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. }
69. 1. @Test
2. public void deveEntrarEmUmaPagina() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. }
71. 1. @Test
2. public void deveVerificarOTitulo() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. }
72. 1. @Test
2. public void deveVerificarOTitulo() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. String titulo = driver.getTitle();
7. }
73. 1. @Test
2. public void deveVerificarOTitulo() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. String titulo = driver.getTitle();
7. assertEquals(“Selenium – Playland”, titulo);
8. }
74. Classe WebDriver
Abstração de um browser, implementada por meio de
drivers: FirefoxDriver, ChromeDriver, entre outros...
get(url) – Carrega uma página
getCurrentUrl() – Retorna a url
getPageSource() – Retorna o código fonte da página
getTitle() – Retorna o título da página
close() – Fecha o browser
79. Classe WebDriver
Abstração de um browser, implementada por meio de
drivers: FirefoxDriver, ChromeDriver, entre outros...
findElement(localizador) – Localiza um elemento na página
findElements(localizador) – Localiza elementos na página
81. Classe By
Mecanismo utilizado para localizar um elemento
dentro de um documento.
id(“identificador do elemento”)
className(“nome da classe”)
tagName(“nome da tag”)
name(“nome do elemento”)
cssSelector(“css”)
partialLinkText(“link parcial”)
linkText(“link”)
xpath(“xpath”)
107. Cascading Style Sheet, ou simplismente CSS
é uma linguagem de estilo utilizada para
definir a apresentação de documentos
escritos em uma linguagem de marcação
como o HTML.
Seu principal benefício é a separação entre
a estrutura e o estilo em um documento.
118. 1. @Test
2. public void localizarElementoPorCSS() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. WebElement elemento = driver.findElement(By.cssSelector(“.negrito”));
7. }
119. Tipos de CSS Selector
* – Seleciona tudo
X – Tag Selector – Seleciona o elemento X.
#X – Id Selector – Seleciona o elemento com identificador
igual a X.
.X – Class Selector – Seleciona todos os elemento com a classe
igual a X.
X Y – Descendant Selector – Seleciona todos os elementos Y
que estejam dentro do elemento X.
X > Y – Child Selector – Seleciona os elementos Y que sejam filhos de Y.
X[y] – Seleciona os elementos que possuem o atributo y.
X[y="z"] – Seleciona os elementos que possuem o atributo y = "z".
X[y="z"][a="b"] – Seleciona os elementos que possuem o atributo y = "z"
e a="b".
122. XPath, definido pela W3C, é uma linguagem
de consulta (Query Language) que permite
construir expressões que percorrem e
processam um documento XML de maneira
similar a expressões regulares.
Os principais operadores são / e //. O
primeiro serve para dar um passo na árvore
XML enquanto o segundo pula vários níveis
de uma só vez.
130. 1. @Test
2. public void localizarElementoPorXPath() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. }
131. 1. @Test
2. public void localizarElementoPorXPath() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. WebElement elemento = driver.findElement(By.xpath(“html/body/h1”));
7. }
132. Sintaxe do XPath
h1 – Seleciona todos os elementos h1
html/body/h1 – Seleciona o elemento h1, passando por body e
html.
html//h1 – Seleciona o elemento h1 diretamente, sem passar
por body.
//h1 – Seleciona todos os elementos h1
html/body/h1[2] – Seleciona o segundo elemento h1
html/body/h1[last()] – Seleciona o último elemento h1
html/body/h1[last()-1] – Seleciona o penúltimo elemento h1
html/body/h1[@style='font-weight: bold'] – Seleciona os
elementos h1 com o atributo style igual a font-weight: bold.
134. Classe WebElement
Representa um elemento e oferece métodos para
interagir com ele.
getText() – Retorna o texto contido no elemento
click() – Clica sobre o elemento
getAttribute(nome) – Retorna o valor do atributo
getCssValue(nome) – Retorna o valor da propriedade
getTagName() – Retorna o nome da tag
140. 1. @Test
2. public void clicarEmUmLink() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. }
141. 1. @Test
2. public void clicarEmUmLink() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. WebElement link = driver.findElement(By.linkText(“Ir para o conteúdo”));
7. }
142. 1. @Test
2. public void clicarEmUmLink() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. WebElement link = driver.findElement(By.linkText(“Ir para o conteúdo”));
7. link.click();
8. }
143. 1. @Test
2. public void clicarEmUmLink() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. WebElement link = driver.findElement(By.linkText(“Ir para o conteúdo”));
7. link.click();
8. assertEquals(“Selenium – Playland – Sucesso”, driver.getTitle());
9. }
144. Classe Navigation
Permite realizar tipos específicos de navegação.
to(url) – Navega para a url, similar ao comando get(url)
back() – Retorna para a página anterior
forward() – Vai para a próxima página
refresh() – Recarrega a página
145. 1. @Test
2. public void clicarEmUmLink() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. WebElement link = driver.findElement(By.linkText(“Ir para o conteúdo”));
7. link.click();
8. assertEquals(“Selenium – Playland – Sucesso”, driver.getTitle());
9. }
146. 1. @Test
2. public void clicarEmUmLink() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. WebElement link = driver.findElement(By.linkText(“Ir para o conteúdo”));
7. link.click();
8. assertEquals(“Selenium – Playland – Sucesso”, driver.getTitle());
9. driver.navigate().back();
10. assertEquals(“Selenium – Playland”, driver.getTitle());
11. }
148. Classe WebElement
Representa um elemento e oferece métodos para
interagir com ele.
clear() – Limpa o texto contido no elemento
getValue() – Retorna o valor do elemento
sendKeys(text) – Envia um texto para o elemento
isSelected() – Verifica se um radio button ou checkbox está
selecionado
155. 1. @Test
2. public void preencherUmFormulario() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. WebElement form = driver.findElement(By.tagName(“form”));
7. }
156. 1. @Test
2. public void preencherUmFormulario() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. WebElement form = driver.findElement(By.tagName(“form”));
7. WebElement nome = driver.findElement(By.name(“nome”));
8. }
157. 1. @Test
2. public void preencherUmFormulario() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. WebElement form = driver.findElement(By.tagName(“form”));
7. WebElement nome = driver.findElement(By.name(“nome”));
8. WebElement senha = driver.findElement(By.name(“senha”));
9. }
158. Classe Select
selectByVisibleText(text) – Seleciona uma opção pelo texto
selectByValue(value) – Seleciona uma opção pelo valor
selectByIndex(index) – Seleciona uma opção pelo índice
getOptions() – Retorna uma lista com as opções
getFirstSelectedOption() – Retorna a primeira opção
selecionada
isMultiple() – Verifica se o tipo do select é múltiplo
getAllSelectedOptions() – Retorna todas as opções
selecionadas
deselectAll() – Desmarca todas as opções
deselectByVisibleText(text) – Desmarca uma opção pelo
texto
159. 1. @Test
2. public void preencherUmFormulario() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. WebElement form = driver.findElement(By.tagName(“form”));
7. WebElement nome = driver.findElement(By.name(“nome”));
8. WebElement senha = driver.findElement(By.name(“senha”));
9. }
160. 1. @Test
2. public void preencherUmFormulario() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. WebElement form = driver.findElement(By.tagName(“form”));
7. WebElement nome = driver.findElement(By.name(“nome”));
8. WebElement senha = driver.findElement(By.name(“senha”));
9. Select tipo = new Select(driver.findElement(By.name(“tipo”)));
10. }
168. Classe TargetLocator
Permite mudar driver para uma outra janela ou
frame.
switchTo().window(“nome da janela”) – Alterna o driver para
outra janela
switchTo().frame(“nome do frame”) – Alterna o driver para
outro frame
getWindowHandle() – Retorna o nome da janela ativa,
importante para voltar para a janela de origem após alternar
para outra janela
getWindowHandlers() – Retorna a lista de janelas
169. 1. @Test
2. public void interagirComNovaJanela() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. }
170. 1. @Test
2. public void interagirComNovaJanela() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. String origem = driver.getWindowHandle();
7. }
171. 1. @Test
2. public void interagirComNovaJanela() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. String origem = driver.getWindowHandle();
7. WebElement abrir = driver.findElement(By.id(“abrirNovaJanela”));
8. }
172. 1. @Test
2. public void interagirComNovaJanela() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. String origem = driver.getWindowHandle();
7. WebElement abrir = driver.findElement(By.id(“abrirNovaJanela”));
8. abrir.click();
9. }
173. 1. @Test
2. public void interagirComNovaJanela() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. String origem = driver.getWindowHandle();
7. WebElement abrir = driver.findElement(By.id(“abrirNovaJanela”));
8. abrir.click();
9. driver.switchTo().window(“Nova Janela”);
10. }
181. Classe Alert
Representa uma abstração de um alerta e fornece
métodos para interagir.
accept() – Aceita o alerta
dismiss() – Cancela o alerta
getText() – Retorna a mensagem do alerta
187. Classe Timeouts
Configura o tempo de timeout do driver em
diferentes situações.
implicitlyWait(tempo, medida) – Define um tempo em que
o driver aguarda até que um elemento solicitado esteja
disponível.
pageLoadTimeout(tempo, medida) – Define um tempo em
que o driver aguarda pelo carregamento da página.
setScriptTimeout(tempo, medida) – Define um tempo em
que o driver aguarda pelo carregamento de scripts.
188. 1. @Test
2. public void tratarChamadaAjax() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. }
189. 1. @Test
2. public void tratarChamadaAjax() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. WebElement chamadaAjax= driver.findElement(By.id(“fazerChamadaAjax”));
7. }
190. 1. @Test
2. public void tratarChamadaAjax() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. WebElement chamadaAjax= driver.findElement(By.id(“fazerChamadaAjax”));
7. chamadaAjax.click();
8. }
194. Classe WebDriverWait
Classe responsável por esperar que um
determinado evento aconteça.
WebDriverWait(driver, timeout) – Construtor baseado no
driver e no tempo limite para que uma condição aconteça.
WebDriverWait(driver, timeout, sleep) – Construtor baseado
no driver e no tempo limite para que uma condição
aconteça. Além disso, é possível configurar de quanto em
quanto tempo o processo se repetirá. O tempo default é de
500ms.
until(condition) – Aguarda até que uma condição aconteça
195. 1. @Test
2. public void tratarChamadaAjax() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. WebElement chamadaAjax= driver.findElement(By.id(“fazerChamadaAjax”));
7. chamadaAjax.click();
8. }
196. 1. @Test
2. public void tratarChamadaAjax() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. WebElement chamadaAjax= driver.findElement(By.id(“fazerChamadaAjax”));
7. chamadaAjax.click();
8. WebDriverWait wait = new WebDriverWait(driver, 10);
9. }
197. 1. @Test
2. public void tratarChamadaAjax() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. WebElement chamadaAjax= driver.findElement(By.id(“fazerChamadaAjax”));
7. chamadaAjax.click();
8. WebDriverWait wait = new WebDriverWait(driver, 10);
9. wait.until();
10. }
203. 1. @Test
2. public void tratarChamadaAjax() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. WebElement chamadaAjax= driver.findElement(By.id(“fazerChamadaAjax”));
7. chamadaAjax.click();
8. WebDriverWait wait = new WebDriverWait(driver, 10);
9. wait.until();
10. }
204. Classe ExpectedConditions
Condições mais comuns
alertIsPresent() – Verifica se existe um alerta presente
titleContains(titulo) – Verifica se o título da página contém
o informado como parâmetro
titleIs(titulo) – Verifica se o título da página é igual ao
passado como parâmetro
textToBePresentInElement(localizador, texto) – Verifica se o
texto presente no elemento
205. 1. @Test
2. public void tratarChamadaAjax() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. WebElement chamadaAjax= driver.findElement(By.id(“fazerChamadaAjax”));
7. chamadaAjax.click();
8. WebDriverWait wait = new WebDriverWait(driver, 10);
9. wait.until();
10. }
206. 1. @Test
2. public void tratarChamadaAjax() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. WebElement chamadaAjax= driver.findElement(By.id(“fazerChamadaAjax”));
7. chamadaAjax.click();
8. WebDriverWait wait = new WebDriverWait(driver, 10);
9. wait.until(ExpectedConditions.textToBePresentInElement(By.id(“callback_chamada_ajax”), “AgileCode”));
10. }
207. Classe FluentWait
FluentWait(driver) – Construtor baseado no driver.
withTimeout(timeout) – Configura quanto tempo o driver
deve aguardar.
withMessage(msg) – Configura uma mensagem caso o
elemento não seja encontrado.
poolingEvery(duration) – Configura o intervalo de
verificação da condição.
ignoring(exception) – Ignora uma determinada exceção.
until() – Construtor baseado no driver.
209. Classe Actions
Permite realizar ações como arrastar e soltar
elementos.
clickAndHold(element) – Clica e segura um elemento.
moveTo(element) – Move o elemento para outro elemento.
pause(timeout) – Aguarda por um tempo determinado em milisegundos.
release() – Solta o elemento.
dragAndDrop(source, target) – Clica e segura um elemento, movendo-o
para outro elemento. (Similar a utilizar os métodos clickAndHold, moveTo e
release, combinados)
build() – Constrói a ação.
perform() – Executa a ação.
210. 1. @Test
2. public void dragAndDrop() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. }
211. 1. @Test
2. public void dragAndDrop() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. WebElement elemento1 = driver.findElement(By.id(“elemento1”));
7. }
226. 1. @Test
2. public void preencherUmFormulario() {
3. FirefoxDriver driver = new FirefoxDriver();
4. String pagina = “http://www.agilecode.com.br/selenium”;
5. driver.get(pagina);
6. WebElement form = driver.findElement(By.tagName(“form”));
7. WebElement nome = driver.findElement(By.name(“nome”));
8. WebElement senha = driver.findElement(By.name(“senha”));
9. nome.sendKeys(“agilecode”);
10. senha.sendKeys(“123456”);
11. }
227. Page Object é um padrão de modelagem de
página na forma de objetos que tem como
objetivo reduzir a duplicação de código
relacionado a localização de elementos e
manipulação de formulários dentro dos
métodos de teste.
230. Annotation FindBy
Anotação responsável por vincular um elemento da
página a um WebElement.
@FindBy(name=“name”) – Localiza um elemento utilizando
o atributo nome.
@FindBy(id=“id”) – Localiza um elemento utilizando o seu
identificador.
@FindBy(css=“css”) – Localiza um elemento por meio de
um seletor CSS.
247. Classe PageFactory
Classe responsável por realizar o vínculo entre os
elementos da página e do Page Object.
initElements(driver, page) – Inicializa o Page Object
realizando o vínculo dos elementos
258. Selenium Server é uma software que
permite a execução remota dos testes em
maquinas diferentes, distribuindo seu
processamento ou mesmo para utilizar
browsers específicos em versões diferentes
de sistemas operacionais.
262. Selenium Server
Processo de Instalação
http://code.google.com/p/selenium/downloads/list
Fazer o download do arquivo selenium-server-standalone-
2.31.0.jar
263. Selenium Server
Processo de Instalação
http://code.google.com/p/selenium/downloads/list
Fazer o download do arquivo selenium-server-standalone-
2.31.0.jar
java –jar selenium-server-standalone-2.31.0.jar
265. 1. @Test
2. public void umTesteDeAceitacaoQualquer() {
3. FirefoxDriver driver = new FirefoxDriver();
4. }
266. 1. @Test
2. public void umTesteDeAceitacaoQualquer() {
3. }
267. 1. @Test
2. public void umTesteDeAceitacaoQualquer() {
3. WebDriver driver = new RemoteWebDriver(url, browser);
4. }
268. 1. @Test
2. public void umTesteDeAceitacaoQualquer() {
3.
4. WebDriver driver = new RemoteWebDriver(url, browser);
5. }
269. 1. @Test
2. public void umTesteDeAceitacaoQualquer() {
3. URL url = new URL(“http://192.168.0.1:4444/wd/hub”);
4. WebDriver driver = new RemoteWebDriver(url, browser);
5. }
270. 1. @Test
2. public void umTesteDeAceitacaoQualquer() {
3. URL url = new URL(“http://192.168.0.1:4444/wd/hub”);
4.
5. WebDriver driver = new RemoteWebDriver(url, browser);
6. }
271. 1. @Test
2. public void umTesteDeAceitacaoQualquer() {
3. URL url = new URL(“http://192.168.0.1:4444/wd/hub”);
4. Capabilities browser = DesiredCapabilities.firefox();
5. WebDriver driver = new RemoteWebDriver(url, browser);
6. }
272. Os testes do Selenium demoram muito,
como melhorar a performance?
277. Selenium Grid
Processo de Instalação e Inicialização
• Entrar em http://code.google.com/p/selenium/downloads/list
278. Selenium Grid
Processo de Instalação e Inicialização
• Entrar em http://code.google.com/p/selenium/downloads/list
• Fazer o download do arquivo selenium-server-standalone-2.31.0.jar
279. Selenium Grid
Processo de Instalação e Inicialização
• Entrar em http://code.google.com/p/selenium/downloads/list
• Fazer o download do arquivo selenium-server-standalone-2.31.0.jar
• Renomear o arquivo para selenium-server.jar
280. Selenium Grid
Processo de Instalação e Inicialização
• Entrar em http://code.google.com/p/selenium/downloads/list
• Fazer o download do arquivo selenium-server-standalone-2.31.0.jar
• Iniciar o hub: java –jar selenium-server-standalone-2.31.0.jar –role hub
281. Selenium Grid
Processo de Instalação e Inicialização
• Entrar em http://code.google.com/p/selenium/downloads/list
• Fazer o download do arquivo selenium-server-standalone-2.31.0.jar
• Iniciar o hub: java –jar selenium-server.jar –role hub
• Iniciar o node: java –jar selenium-server.jar -role node –hub
http://ip_do_hub:4444/grid/register
282. Selenium Grid
Processo de Instalação e Inicialização
• Entrar em http://code.google.com/p/selenium/downloads/list
• Fazer o download do arquivo selenium-server-standalone-2.31.0.jar
• Renomear o arquivo para selenium-server.jar
• Iniciar o hub: java –jar selenium-server.jar –role hub
• Iniciar o node: java –jar selenium-server.jar -role node –hub
http://ip_do_hub:4444/grid/register
• Visualizar o grid em: http://ip_do_hub:4444/grid/console
284. Não é possível executar vários nodes na mesma
maquina sem configurar portas diferentes
285. Selenium Grid
Configuração
• Modificar a porta de execução do node: -port 5556
(Por padrão a porta utilizada é a 5555)
• Configurar o browser padrão: -browser browserName=firefox
(Por padrão o node é configurado com firefox, chrome e ie)
Editor's Notes
Qual é a sua obra?
Desmotivado
Desmotivado
Desmotivado
Qual é a sua obra?
Qual é a sua obra?
Qual é a sua obra?
Desmotivado
Desmotivado
Desmotivado
Qual é a sua obra?
Desmotivado
Desmotivado
É o famoso faz uma coisa e estraga a outra.
É o famoso faz uma coisa e estraga a outra.
É o famoso faz uma coisa e estraga a outra.
Refactoring é considerada apenas uma limpeza no código? A refatoração vai além disso. Ela é uma forma de limpar o código de maneira eficiente e controlada.
Cansado de fazer uma coisa e estragar a outra...
Metáfora da perda das chaves...
Cansado de fazer uma coisa e estragar a outra...
Cansado de fazer uma coisa e estragar a outra...
Cansado de fazer uma coisa e estragar a outra...
Cansado de fazer uma coisa e estragar a outra...
Cansado de fazer uma coisa e estragar a outra...
Escopo das dependências
O resultado de tudo isso é o desperdício...
Cansado de fazer uma coisa e estragar a outra...
Cansado de fazer uma coisa e estragar a outra...
Cansado de fazer uma coisa e estragar a outra...
Mostrar um exemplo real...
Cansado de fazer uma coisa e estragar a outra...
Archetypes
mvn archetype:generate
Escopo das dependências
Gestão de dependências
Escopo das dependências
Cansado de fazer uma coisa e estragar a outra...
Escopo das dependências
Cansado de fazer uma coisa e estragar a outra...
Escopo das dependências
Cansado de fazer uma coisa e estragar a outra...
Cansado de fazer uma coisa e estragar a outra...
Escopo das dependências
Escopo das dependências
Escopo das dependências
Escopo das dependências
Escopo das dependências
Cansado de fazer uma coisa e estragar a outra...
Escopo das dependências
Escopo das dependências
Escopo das dependências
Escopo das dependências
Escopo das dependências
Escopo das dependências
Escopo das dependências
Escopo das dependências
Escopo das dependências
Escopo das dependências
Escopo das dependências
Escopo das dependências
Escopo das dependências
Escopo das dependências
Escopo das dependências
Escopo das dependências
Escopo das dependências
2hs
Escopo das dependências
Escopo das dependências
Escopo das dependências
Escopo das dependências
Cansado de fazer uma coisa e estragar a outra...
Escopo das dependências
Cansado de fazer uma coisa e estragar a outra...
Escopo das dependências
Cansado de fazer uma coisa e estragar a outra...
Cansado de fazer uma coisa e estragar a outra...
Cansado de fazer uma coisa e estragar a outra...
Escopo das dependências
Cansado de fazer uma coisa e estragar a outra...
Escopo das dependências
Escopo das dependências
Cansado de fazer uma coisa e estragar a outra...
Escopo das dependências
Cansado de fazer uma coisa e estragar a outra...
Escopo das dependências
Escopo das dependências
Cansado de fazer uma coisa e estragar a outra...
Escopo das dependências
Escopo das dependências
Cansado de fazer uma coisa e estragar a outra...
Escopo das dependências
Cansado de fazer uma coisa e estragar a outra...
Cansado de fazer uma coisa e estragar a outra...
Escopo das dependências
Cansado de fazer uma coisa e estragar a outra...
Escopo das dependências
Cansado de fazer uma coisa e estragar a outra...
Escopo das dependências
Cansado de fazer uma coisa e estragar a outra...
Cansado de fazer uma coisa e estragar a outra...
Cansado de fazer uma coisa e estragar a outra...
Escopo das dependências
Cansado de fazer uma coisa e estragar a outra...
Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
Cansado de fazer uma coisa e estragar a outra...
Cansado de fazer uma coisa e estragar a outra...
Escopo das dependências
Cansado de fazer uma coisa e estragar a outra...
Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
Cansado de fazer uma coisa e estragar a outra...
Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história