Topicos Recents
-
Dica de ferramentas para testes visuais
Geral3 -
Problemas com o nightwatch
Geral1 -
Ajuda com Curso
Geral5 -
Como você mapearia este elemento?
Geral12 -
Questionário sobre testes automatizados em aplicativos móveis
Geral4 -
A arte de desenvolver testes - Cucumber + Capybara
Artigos e Tutoriais44 -
Como abrir todos os link de uma página
Geral2 -
QA Analyst/Project Lead (Florianópolis/Remote)
Vagas1 -
QA Engineer - (Pinheiro)
Vagas1 -
Teste de Stress
Geral5 -
Tester que não programa, leia isso por favor.
Artigos e Tutoriais6 -
Executar tags em features diferentes no Cucumber
Geral1 -
QA, trate sua automação como software
Artigos e Tutoriais5 -
[Survey] - Testes automatizados em aplicativos móveis
Geral6 -
Cucumber para javascript Duvida
Artigos e Tutoriais2 -
Vagas QA PL e Sr - São Paulo
Vagas1 -
Episode 010 - The Automate or Die Special - The Evil Tester Show
Feed de Blogs e Posts2 -
Ruby In Tests
Artigos e Tutoriais7 -
Livros
Geral19 -
Anexar printscreen ao Allure Report
Geral28
Using WebDriver after calling quit()?
-
@BeforeClass public static void inicializa(){ page.acessarTelaInicial2(); } @AfterClass public static void fecha() { if (Propriedades.FECHAR_BROWSER) { killDriver(); } } *************************************************** public void acessarTelaInicial2() { DriverFactory.getDriver().get("url"); } *********************************** @Test public void teste1() {//teste 1} @Teste public void teste2() {//teste 2} ***************************************** public static WebDriver getDriver() { if (driver == null) { switch (Propriedades.browser) { case FIREFOX: System.setProperty("/geckodriver.exe"); DriverFactory.driver = new FirefoxDriver(); break; case CHROME: System.setProperty("/chromedriver.exe"); DriverFactory.driver = new ChromeDriver(); break; } driver.manage().window().setSize(new Dimension(1200, 765)); } return driver; } public static void killDriver() { if (driver != null) { driver.quit(); driver = null; } }
pessoal estou usando uma estrutura como esse, e quando o segundo teste vai rodar apresenta o seguinte erro:
org.openqa.selenium.NoSuchSessionException: Session ID is null. Using WebDriver after calling quit()?alguém ja passou por isso?
-
Não está dando algum “driver.close” e tentando fechar…e pq driver = null; ?
Uma duvida, a cada teste ele fecha o driver? Onde reinicializa ele dai…? -
@Ramses-Saccol-de-Almeida não tem “driver.close”.
driver = null; -> para que no método teste2 ele consiga instanciar um novo driver.
eu uso um @beforeClass para que ele instancie um driver a cada classe
e o @afterClass para que ele feche o driver após o término de cada classe.no meu projeto real eu tenho 2 classes, a primeira classe ele executa corretamente, porém na hora de executar a segunda classe dá o erro.
-
Isso está suspeito, parece que tu está tentando fechar o driver o qual já parece estar fechado…Chegou a ver se está inicializando o driver e fechando na sequencia correta?
-
Vou tentar apresentar algo mais genérico:
Minha suite de testes está assim:
@RunWith(Suite.class) @SuiteClasses({ Test1.class, Test2.class }) public class SuiteTestes { private static LoginPage page = new LoginPage(); @BeforeClass public static void iniciar() { //aqui eu instancio o driver e abro a url. page.acessarTelaInicial(); } } @AfterClass public static void finaliza() { DriverFactory.killDriver(); } }
tenho 2 classes de teste
public class Test1 extends BaseTest { Test1Page test1page= new Test1Page(); @Test public void test1() { test1page.pesquisar("pesquisa1"); test1page.clicarPesquisa(); } } public class Test2 extends BaseTest { Test2Page test2page= new Test2Page(); @Test public void test1() { test2page.pesquisar("pesquisa2"); test2page.clicarPesquisa(); } }
a primeira pesquisa, faz corrertamente
a segunda pesquisa não da certo porque o site abre e fecha rapidamente. -
Olha… parece que
private static LoginPage page = new LoginPage();
é quem realmente gera a instancia do selenium…e depois que seu primeiro teste termina, ele termina ele com
DriverFactory.killDriver();
Ou seja… ele vai executar o seu
beforeClass
e vai dar erro pq não vai ter mais instancia. -
quando o " page.acessarTelaInicial(); " é chamado ocorre o seguinte:
public void acessarTelaInicial() { DriverFactory.getDriver().get("url"); }
quando o getDriver é chamado ocorre:
public static WebDriver getDriver() { if (driver == null) { switch (Propriedades.browser) { case FIREFOX: System.setProperty("webdriver.gecko.driver", /geckodriver.exe"); DriverFactory.driver = new FirefoxDriver(); break; case CHROME: System.setProperty("webdriver.chrome.driver", "/chromedriver.exe"); DriverFactory.driver = new ChromeDriver(); break; } driver.manage().window().setSize(new Dimension(1200, 765)); } return driver; }
acredito que dessa forma o driver é instanciado novamente sempre que o @beforeClass é chamado.
O que voces acham?
não estou conseguindo entender o que está dando errado. -
Por acaso tu já tentou colocar um breakpoint na segunda classe e verificar se o driver é instanciado novamente ou ele tenta usar a sessão atual e fecha no processo? Acho que pela estrutura que tu está usando seria o mais sensato…A minha duvida é, se tu criar duas classes independentes de teste, e rodar individual, funciona?
-
Bom dia Pamela!
Acho que pode mudar um pouco a estrutura do seu teste. O AfterClass vai rodar depois de toda a class. O after roda depois de cada teste.
Se seu objetivo é matar o navegador no final do teste e abrir um novo quando iniciar um novo teste acredito que vai funcionar melhor.
Peguei um caso de teste aqui que faço isso:
@BeforeClass public static void setUpClass() throws IOException { prop = new Properties(); ClassLoader loader = Thread.currentThread().getContextClassLoader(); InputStream stream = loader.getResourceAsStream("application.properties"); prop.load(stream); email = prop.getProperty("email"); password = prop.getProperty("password"); eventTitle = prop.getProperty("eventTitle"); eventDescription = prop.getProperty("eventDescription"); startTime = prop.getProperty("startTime"); finishTime = prop.getProperty("finishTime"); address = prop.getProperty("address"); addressName = prop.getProperty("addressName"); urlExternal = prop.getProperty("urlExternal"); } @Before public void setUp(){ driver = Web.createChrome(); } @After public void tearDown() { eventTitleValidation = ""; textToast = ""; surveyTitleValidation = ""; driver.quit(); } @Test public void createEventRealizesPublic() { new LoginPage(driver) .login(email, password) .clickMenuEvent() .clickList() .newEvent() .typeTitle(eventTitle + "Realiza Publico " + numberRandom) .typeDescription(eventDescription) .insertImage(image) .typeDateStart() .typeStartTime(startTime) .typeFinishTime(finishTime) .typeAddress(address) .typeAddressName(addressName + numberRandom) .saveEvent() .sleep(15); getTextToast(); navigateEventPage(); getEventTitle(); assertEquals("Evento criado com sucesso!", textToast); assertEquals(eventTitle + "Realiza Publico " + numberRandom, eventTitleValidation); System.out.println(eventTitle + "Realiza Publico " + numberRandom); }
-
@Pamela-Fracalossi não sei se faz sentido, mas eu tive um problema similar e ao instanciar a classe da pagina dentro do @BeforeClass resolveu. Faz sentido? Não sei kkkk mas funcionou aqui.