2017-08-28 91 views
0

我开始在黄瓜,我做了埃利亚斯诺盖拉演习,并希望改善结果。等着黄瓜,不关闭浏览器

的URL练习: http://eliasnogueira.com/arquivos_blog/selenium/desafio/2desafio/

我想要做的改进:

1)我didn't知道一种方法来声明“WebDriverWait等待=新WebDriverWait(驱动程序,10);”只是一次。 首先我尝试了setUp方法之前,但我有问题“无法实例化类”,所以我决定把它放在使用它的方法,但我知道它不是那么好。

2)我想让浏览器在每次测试运行时都不关闭并重新打开。

这里是我的代码:

RunTests.java

package tests; 
import org.junit.runner.RunWith; 

import cucumber.api.CucumberOptions; 
import cucumber.api.junit.Cucumber; 

@RunWith(Cucumber.class) 
@CucumberOptions(
     features = "funcionalidades", //pasta.. 
     glue = "tests", //pacote.. 
     plugin = { 
       //gerar um relatorio do teste.. 
       "html:target/cucumber-html-report", 
       "json:target/cucumber.json", "pretty:target/cucumber-pretty.txt", 
      "usage:target/cucumber-usage.json", "junit:target/cucumber-results.xml" 
    } 
) 
public class RunTests { 

} 

EdicaoInlineTestSteps.java

package tests; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.chrome.ChromeDriver; 
import org.openqa.selenium.support.ui.ExpectedConditions; 
import org.openqa.selenium.support.ui.WebDriverWait; 

import cucumber.api.java.After; 
import cucumber.api.java.Before; 
import cucumber.api.java.en.Given; 
import cucumber.api.java.en.Then; 
import cucumber.api.java.en.When; 

import static org.junit.Assert.*; 


public class EdicaoInlineTestSteps { 

    WebDriver driver; 


    @Before 
    public void setUp() throws Exception{ 
     System.setProperty("webdriver.chrome.driver", "C:\\caroltestes\\chromedriver.exe"); 
     driver = new ChromeDriver(); 



    } 

    @After 
    public void tearDown(){ 

     driver.quit(); 
    } 



    @Given("^Acessar a página de edição inline do site do Elias Nogueira$") 
    public void acessar_a_página_de_edição_inline_do_site_do_Elias_Nogueira() throws Throwable { 
     driver.get("http://eliasnogueira.com/arquivos_blog/selenium/desafio/2desafio/"); 

    } 

    @Given("^Alterar o nome \"(.*?)\"$") 
    public void alterar_o_nome(String nome) throws Throwable { 

     driver.findElement(By.id("name_rg_display_section")).click(); 
     driver.findElement(By.id("nome_pessoa")).clear(); 
     driver.findElement(By.id("nome_pessoa")).sendKeys(nome); 


    } 

    @When("^Completar a ação através do Salvar nome$") 
    public void completar_a_ação_através_do_Salvar_nome() throws Throwable { 
     driver.findElement(By.cssSelector("#name_hv_editing_section > input[value='Salvar']")).click(); 

    } 

    @Then("^Verificar que a troca do nome foi feita com sucesso$") 
    public void verificar_que_a_troca_do_nome_foi_feita_com_sucesso() throws Throwable { 

     WebElement camponome = driver.findElement(By.id("name_rg_display_section")); 
     WebDriverWait wait = new WebDriverWait(driver, 10); 
     wait.until(ExpectedConditions.visibilityOf(camponome)); 

     String resultado = driver.findElement(By.id("name_rg_display_section")).getText(); 
     assertEquals(resultado, "Carol Cruz"); 

    } 

    @Given("^Alterar o email \"(.*?)\"$") 
    public void alterar_o_email(String email) throws Throwable { 

     driver.findElement(By.id("email_rg_display_section")).click(); 
     driver.findElement(By.id("email_value")).clear(); 
     driver.findElement(By.id("email_value")).sendKeys(email); 


    } 

    @When("^Completar a ação através do Salvar email$") 
    public void completar_a_ação_através_do_Salvar_email() throws Throwable { 
     driver.findElement(By.cssSelector("#email_hv_editing_section > input[type=\"button\"]:nth-child(4)")).click(); 

    } 

    @Then("^Verificar que a troca do email foi feita com sucesso$") 
    public void verificar_que_a_troca_do_email_foi_feita_com_sucesso() throws Throwable { 

     WebElement campoemail = driver.findElement(By.id("email_rg_display_section")); 
     WebDriverWait wait = new WebDriverWait(driver, 10); 
     wait.until(ExpectedConditions.visibilityOf(campoemail)); 

     String mensagem2 = driver.findElement(By.id("email_rg_display_section")).getText(); 
     assertEquals (mensagem2 , "Email: [email protected]"); 

    } 

    @Given("^Alterar o telefone \"(.*?)\"$") 
    public void alterar_o_telefone(String telefone) throws Throwable { 

     driver.findElement(By.id("phone_rg_display_section")).click(); 
     driver.findElement(By.id("phone_value")).clear(); 
     driver.findElement(By.id("phone_value")).sendKeys(telefone); 

    } 

    @When("^Completar a ação através do Salvar telefone$") 
    public void completar_a_ação_através_do_Salvar_telefone() throws Throwable { 
     driver.findElement(By.cssSelector("#phone_hv_editing_section > input[type=\"button\"]:nth-child(4)")).click(); 


    } 

    @Then("^Verificar que a troca do telefone foi feita com sucesso$") 
    public void verificar_que_a_troca_do_telefone_foi_feita_com_sucesso() throws Throwable { 
     WebElement campotelefone = driver.findElement(By.id("phone_rg_display_section")); 
     WebDriverWait wait = new WebDriverWait(driver, 10); 
     wait.until(ExpectedConditions.visibilityOf(campotelefone)); 

     String mensagem3 = driver.findElement(By.id("phone_rg_display_section")).getText(); 
     assertEquals (mensagem3 , "Telefone: 21 21222121"); 

    } 

} 

EdicaoInline.feature

#encoding: iso-8859-1 

Feature: Edição Inline 
    Eu quero realizar a edição inline do site do Elias Nogueira 


Scenario: Realizando a alteração do nome 
Given Acessar a página de edição inline do site do Elias Nogueira 
    And Alterar o nome "Carol Cruz" 
When Completar a ação através do Salvar nome 
Then Verificar que a troca do nome foi feita com sucesso 


Scenario: Realizando a alteração do email 
Given Acessar a página de edição inline do site do Elias Nogueira 
    And Alterar o email "[email protected]" 
When Completar a ação através do Salvar email 
Then Verificar que a troca do email foi feita com sucesso 



Scenario: Realizando a alteração do telefone 
Given Acessar a página de edição inline do site do Elias Nogueira 
    And Alterar o telefone "21 21222121" 
When Completar a ação através do Salvar telefone 
Then Verificar que a troca do telefone foi feita com sucesso 

回答

0

我们正在使用qaf你应该试试看。它提供了一种以最有效的方式重用现有驱动程序会话的方法。

它管理驱动程序初始化和拆卸顺序和并行执行。所以你不必担心何时拆卸或创建驱动程序。您可以使用属性selenium.singletone设置该行为来定义驱动程序实例范围。因此,您可以在代码之外配置是否为每个测试设置新的驱动程序(浏览器)会话,或者如果存在相同的驱动程序会话。

0

在您使用@Before@After的那一刻,这些对于每个测试,这使得浏览器打开和关闭多次,使用@BeforeClass@AfterClass会解决这个运行一次。关于这方面的更多信息可以参见here

+0

我尝试切换到BeforeClass和AfterClass,但我有一个错误:java.lang.NullPointerException –

+0

黄瓜没有BeforeClass和AfterClass。 我想我不能和黄瓜一起使用。 我对不对? –

1
public class EdicaoInlineTestSteps { 

    WebDriver driver; 
    WebDriverWait wait; 

    @Before 
    public void setUp() throws Exception{ 
     System.setProperty("webdriver.chrome.driver", 
     "C:\\caroltestes\\chromedriver.exe"); 
     driver = new ChromeDriver(); 
     wait = new WebdriverWait(driver,30); 

} 
+0

谢谢!它帮助了很多! –