Diferenças entre o funcionamento do Selenium Webdriver e o Selenium IDE

636 views
Skip to first unread message

Deivid de Assis Teixeira

unread,
Apr 13, 2016, 9:25:43 AM4/13/16
to GUTS-RS - Grupo de Usuários de Testes de Software do RS - SUCESU-RS
Bom dia Pessoal,

Estou com o seguinte problema, a empresa que eu eu trabalho optou por usar uma plataforma de desenvolvimento destas onde se gera uns fluxos da aplicação, e a ferramenta gera o fonte :(. Bom, essa ferramenta monta a tela através de funções javascript, ou seja, tudo que se vê renderizado na tela é colocado lá em tempo de execução por funções javascript. Tentei iniciar o processo de automação com o selenium webdriver mas não consegui, pois ele não encontrava nenhum do elementos da tela e ao usar a função driver.getpagesource() tudo que o webdriver trás são as tais chamadas de função javascript. Por curiosidade, tentei navegar na tela utilizando o selenium IDE, e o mesmo funciona perfeitamente, encontrado os campos e populando-os conforme o script gravado. Então exportei o script gerado para tentar executar no webdriver e o mesmo erro ocorre. O webdriver não encontra os elementos. Alguém já teve este tipo de problema? Alguma sugestão de solução?

Obrigado a todos.

Elyfran Medeiros

unread,
Apr 13, 2016, 11:36:56 AM4/13/16
to guts-rs...@googlegroups.com
Boa tarde Deivid, poderia colocar seu stack de erro?

--
Você recebeu esta mensagem porque está inscrito para o Google
Grupos "Grupo de Usuarios de Teste de Software - SUCESU-RS" grupo.

Para postar neste grupo, envie um email para guts-rs...@googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para
guts-rs-suces...@googlegroups.com
Para mais opções, visite este grupo em
http://groups.google.com/group/guts-rs-sucesu?hl=pt?hl=en
---
Você recebeu essa mensagem porque está inscrito no grupo "GUTS-RS - Grupo de Usuários de Testes de Software do RS - SUCESU-RS" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para guts-rs-suces...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Gabriel Oliveira

unread,
Apr 13, 2016, 11:41:07 AM4/13/16
to guts-rs...@googlegroups.com
Deivid,

Quando você diz "O webdriver não encontra os elementos.", o que exatamente você programou para acontecer ?

A princípio, todo carregamento de JS demora. Talvez tu só precise adicionar certos Waits Explicitos antes procurar pelos elements que queres, afim de dar tempo para a tela ser montada.

-- 

Gabriel P.A. de Oliveira
https://gpaoliveirablog.wordpress.com









Deivid de Assis Teixeira

unread,
Apr 13, 2016, 1:30:01 PM4/13/16
to GUTS-RS - Grupo de Usuários de Testes de Software do RS - SUCESU-RS
Vou tentar detalhar melhor,

Primeiro os questionamentos do Eduardo Brusch:
1- As paginas geradas são HTML, e o inspecionar elemento encontra toadas as div's e inputs da tela. Porem ao executar um findElement(By"(id, name, css ou xpath)"), o webdriver não encontra os elementos mesmo com estes já renderizados. Pra ter certeza, coloquei um sleep de 2 minutos na tela, e enquanto estava pausado usei o inpecionar elemento e a tela estava inteira renderizada. Mas o retorno do webdriver é sempre NoSuchElementException. Por isso tive a curiosidade de utilizar o metodo getPageSource() para ver o que o webdriver havia lido.

Deivid de Assis Teixeira

unread,
Apr 13, 2016, 1:33:06 PM4/13/16
to GUTS-RS - Grupo de Usuários de Testes de Software do RS - SUCESU-RS
Agora o pedido do Elyfran Medeiros
 
org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"name","selector":"WFRInput769874"}
Command duration or timeout: 30.07 seconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '2.52.0', revision: '4c2593c', time: '2016-02-11 19:03:33'
System info: host: 'VIXEST8', ip: '192.168.50.67', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_60'
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{applicationCacheEnabled=true, rotatable=false, handlesAlerts=true, databaseEnabled=true, version=45.0.2, platform=WINDOWS, nativeEvents=false, acceptSslCerts=true, webStorageEnabled=true, locationContextEnabled=true, browserName=firefox, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}]
Session ID: 627fec1d-0552-46b4-9782-59577b4b08cb
*** Element info: {Using=name, value=WFRInput769874}
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:678)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:363)
at org.openqa.selenium.remote.RemoteWebDriver.findElementByName(RemoteWebDriver.java:461)
at org.openqa.selenium.By$ByName.findElement(By.java:303)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:355)
at com.exemple.tests.Teste.testE(Teste.java:28)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:639)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:816)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1124)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108)
at org.testng.TestRunner.privateRun(TestRunner.java:774)
at org.testng.TestRunner.run(TestRunner.java:624)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:359)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:354)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:312)
at org.testng.SuiteRunner.run(SuiteRunner.java:261)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1215)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1140)
at org.testng.TestNG.run(TestNG.java:1048)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:112)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:205)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:176)
Caused by: org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"name","selector":"WFRInput769874"}
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '2.52.0', revision: '4c2593c', time: '2016-02-11 19:03:33'
System info: host: 'VIXEST8', ip: '192.168.50.67', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_60'
Driver info: driver.version: unknown
at <anonymous class>.FirefoxDriver.prototype.findElementInternal_(file:///C:/Users/DEIVID~1/AppData/Local/Temp/anonymous2837863007318477780webdriver-profile/extensions/fxdr...@googlecode.com/components/driver-component.js:10723)
at <anonymous class>.fxdriver.Timer.prototype.setTimeout/<.notify(file:///C:/Users/DEIVID~1/AppData/Local/Temp/anonymous2837863007318477780webdriver-profile/extensions/fxdr...@googlecode.com/components/driver-component.js:623)

Ps.: Desculpe por estar "floodando" o grupo. 

Deivid de Assis Teixeira

unread,
Apr 13, 2016, 1:43:22 PM4/13/16
to GUTS-RS - Grupo de Usuários de Testes de Software do RS - SUCESU-RS
Ao Gabriel,

Já tentei utilizar tanto Waits Explicitos (Thread.sleep()) e Waits Implícitos (aguarde.until(ExpectedConditions.visibilityOf(XXXXXXX))), mas os elementos não são encontrados.

Elias Nogueira

unread,
Apr 13, 2016, 1:51:44 PM4/13/16
to guts-rs-sucesu
Posta o teu script do Selenium IDE aqui...
Creio que pode ser dois problemas: ou espera ou frames.

Só o teu script do Selenium IDE pode confirmar isso ;)


--
Elias Nogueira


2016-04-13 14:43 GMT-03:00 Deivid de Assis Teixeira <deividt...@trevit.com.br>:
Ao Gabriel,

Já tentei utilizar tanto Waits Explicitos (Thread.sleep()) e Waits Implícitos (aguarde.until(ExpectedConditions.visibilityOf(XXXXXXX))), mas os elementos não são encontrados.

--

Deivid de Assis Teixeira

unread,
Apr 13, 2016, 3:21:11 PM4/13/16
to GUTS-RS - Grupo de Usuários de Testes de Software do RS - SUCESU-RS
Anexei o resultado do getPageResource() e o script gerado pelo IDE.

Mais uma vez, obrigado a todo mundo.
getPageResouce().html
scriptIDE.html

Elias Nogueira

unread,
Apr 13, 2016, 3:46:06 PM4/13/16
to guts-rs-sucesu
Tu tem um frame...
Olha essa linha no teu script do Selenium IDE

selectFramemainform

Por isso que com o WebDriver tu não consegue.
Já te dando uma dica de antemão: nunca confie no export do Selenium IDE para WebDriver... ele ignora coisas como esta.

Para funcionar no teu script do WebDriver tu deve colocar um driver.switchTo("nome do frame") onde o "nome do frame" é o atributo name dele.

Se tu precisar sair do frame e interagir dentro da mesma página com algo que não esteja no frame tu precisa primeiro dar um driver.switchToDefault() para voltar ao foco na página inteira.

Recomendação de leitura para o Selenium WebDriver


Abraço!









--
Elias Nogueira


2016-04-13 16:21 GMT-03:00 Deivid de Assis Teixeira <deividt...@trevit.com.br>:
Anexei o resultado do getPageResource() e o script gerado pelo IDE.

Mais uma vez, obrigado a todo mundo.

--

Deivid de Assis Teixeira

unread,
Apr 13, 2016, 4:54:07 PM4/13/16
to GUTS-RS - Grupo de Usuários de Testes de Software do RS - SUCESU-RS
Funcionou. Como o Elias postou o problema era o iframe da pagina. Após executar o método switchTo().frame("nome do frame"), o webdriver conseguiu identificar os elementos corretamente na tela. Muito obrigado por todas as respostas. Vlw.
Reply all
Reply to author
Forward
0 new messages