Closed ticianatoffoli closed 10 years ago
@ticianatoffoli , você conseguiu evoluir no assunto?
Julian,
sobre o primeiro problema encontrado, para que o link seja encontrado dentro do frame, só conseguimos que o teste passe se indicamos antes algum texto do frame. Acho que o correto seria encontrar sem essa indicação?
Por exemplo:
Cenário atual com erro:
Cenário: Acesso a Tela com Frames e IFramesDado que vou para a tela "Principal"Quando clico em "Avisos para o Rational Solution for CLM"Então será exibido "Avisos da Documentação para o Rational solution for Collaborative Lifecycle Management (CLM)" Cenário atual alterado sem erro:
Cenário: Acesso a Tela com Frames e IFramesDado que vou para a tela "Principal"Então será exibido *"Avisos para o Rational Solution for CLM"*
Quando clico em "Avisos para o Rational Solution for CLM"Então será exibido "Avisos da Documentação para o Rational solution for Collaborative Lifecycle Management (CLM)"
Como devemos proceder para realizar esta correção? Tem idéia?
O outro erro de cast não sei como devemos corrigir.
Em 17 de fevereiro de 2014 14:17, Julian Cesar notifications@github.comescreveu:
@ticianatoffoli https://github.com/ticianatoffoli , você conseguiu evoluir no assunto?
Reply to this email directly or view it on GitHubhttps://github.com/demoiselle/behave/issues/179#issuecomment-35304033 .
Boa tarde! Acho que estou tendo o mesmo problema com aplicativos que usam frames.
Verifiquei que no método click do WebLink, por exemplo, ele faz a varredura por todos os frames do aplicativo Web no getElements(), mas não faz essa mesma varredura no waitElement(). O método waitElement() sempre antecede o getElements(), e no waitElement() está acontecendo a exceção de objeto não encontrado para sistema com frames.
Será que não é isso que está causando o problema?
public class WebLink extends WebBase implements Link {
public void click() {
waitElement(0);
// Clica
getElements().get(0).click();
}
}
O problema foi detectado e em breve teremos a correção.
Olá,
Fiz um teste dando override no click e criando uma função pra dar foco no Frame. Dessa forma funcionou:
@Given("ativo o frame \"$frame\"")
@When("ativo o frame \"$frame\"")
public void ativoOFrame(String frame) {
WebDriver driver = (WebDriver) runner.getDriver();
driver.switchTo().defaultContent();
driver.switchTo().frame(frame);
}
@When(value = "clico em \"$elementName\"", priority = 1)
@Then(value = "clico em \"$elementName\"", priority = 1)
public void clickButton(String elementName) {
WebDriver driver = (WebDriver) runner.getDriver();
String element = runner.getElement(currentPageName, elementName).getElementMap().locator()[0];
ElementLocatorType elementType = runner.getElement(currentPageName, elementName).getElementMap().locatorType();
if (elementType==ElementLocatorType.Id)
driver.findElement(By.id(element)).click();
else if (elementType==ElementLocatorType.XPath)
driver.findElement(By.xpath(element)).click();
}
@rkazuo, você está certo quanto a causa do problema, o foco no frame é um tratamento interno do framework que por algum motivo não está funcionando nesta última versão. Estamos trabalhando nisso.
Pessoal, na versão 1.3.1, por engano, removemos o controle de frames dentro método waitElement. Geramos neste momento a versão 1.3.2-SNAPSHOT com a inclusão do controle https://github.com/demoiselle/behave/commit/bf0c48a68c370f8efc5d855f24030c54ab45d5a6. Se puderem realizar mais testes agradecemos.
@botelhojp baixei novamente o projeto mix e os erros citados acima foram corrigidos, entretanto, obtive os erros abaixo de novas implementações:
Failed to run story stories/richfaces4/fileupload.storyConverted
br.gov.frameworkdemoiselle.behave.exception.BehaveException: Elemento [FileUpload] não encontrado na página
at br.gov.frameworkdemoiselle.behave.runner.webdriver.ui.WebBase.getElements(WebBase.java:118)
at br.gov.frameworkdemoiselle.behave.runner.webdriver.ui.WebBase.getId(WebBase.java:283)
at br.gov.frameworkdemoiselle.behave.runner.webdriver.ui.richfaces4.RichFileUpload.isRichFileUpload(RichFileUpload.java:135)
at br.gov.frameworkdemoiselle.behave.runner.webdriver.ui.richfaces4.RichFileUpload.checkRichfacesComponent(RichFileUpload.java:143)
at br.gov.frameworkdemoiselle.behave.runner.webdriver.ui.richfaces4.RichFileUpload.canAdd(RichFileUpload.java:80)
at br.gov.frameworkdemoiselle.behave.runner.webdriver.ui.richfaces4.RichFileUpload.add(RichFileUpload.java:75)
at demoisellebehave.mix.steps.MySteps.adicionarArquivo(MySteps.java:96)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.jbehave.core.steps.StepCreator$ParameterisedStep.perform(StepCreator.java:550)
at org.jbehave.core.embedder.StoryRunner$FineSoFar.run(StoryRunner.java:499)
at org.jbehave.core.embedder.StoryRunner.runStepsWhileKeepingState(StoryRunner.java:479)
at org.jbehave.core.embedder.StoryRunner.runScenarioSteps(StoryRunner.java:443)
at org.jbehave.core.embedder.StoryRunner.runCancellable(StoryRunner.java:305)
at org.jbehave.core.embedder.StoryRunner.run(StoryRunner.java:219)
at org.jbehave.core.embedder.StoryRunner.run(StoryRunner.java:180)
at org.jbehave.core.embedder.StoryManager$EnqueuedStory.call(StoryManager.java:229)
at org.jbehave.core.embedder.StoryManager$EnqueuedStory.call(StoryManager.java:201)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Quando informo no "FileUpload" o arquivo "/tmp/logo1.png" (FAILED)
(br.gov.frameworkdemoiselle.behave.exception.BehaveException: Elemento [FileUpload] não encontrado na página)
obs: os arquivos indicados no teste precisam ser incluídos no projeto
Failed to run story stories/richfaces4/inputNumberSpinner.storyConverted
br.gov.frameworkdemoiselle.behave.exception.BehaveException: Elemento [inputNumberSpinner] não encontrado na página
at br.gov.frameworkdemoiselle.behave.runner.webdriver.ui.WebBase.getElements(WebBase.java:118)
at br.gov.frameworkdemoiselle.behave.runner.webdriver.ui.WebBase.getId(WebBase.java:283)
at br.gov.frameworkdemoiselle.behave.runner.webdriver.ui.richfaces4.RichInputNumberSpinner.isRichNumberSpin(RichInputNumberSpinner.java:97)
at br.gov.frameworkdemoiselle.behave.runner.webdriver.ui.richfaces4.RichInputNumberSpinner.checkRichfacesComponent(RichInputNumberSpinner.java:105)
at br.gov.frameworkdemoiselle.behave.runner.webdriver.ui.richfaces4.RichInputNumberSpinner.getValue(RichInputNumberSpinner.java:75)
at demoisellebehave.mix.steps.MySteps.thenOValorDoCampoinputNumberSpinnerSerá(MySteps.java:128)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.jbehave.core.steps.StepCreator$ParameterisedStep.perform(StepCreator.java:550)
at org.jbehave.core.embedder.StoryRunner$FineSoFar.run(StoryRunner.java:499)
at org.jbehave.core.embedder.StoryRunner.runStepsWhileKeepingState(StoryRunner.java:479)
at org.jbehave.core.embedder.StoryRunner.runScenarioSteps(StoryRunner.java:443)
at org.jbehave.core.embedder.StoryRunner.runCancellable(StoryRunner.java:305)
at org.jbehave.core.embedder.StoryRunner.run(StoryRunner.java:219)
at org.jbehave.core.embedder.StoryRunner.run(StoryRunner.java:180)
at org.jbehave.core.embedder.StoryManager$EnqueuedStory.call(StoryManager.java:229)
at org.jbehave.core.embedder.StoryManager$EnqueuedStory.call(StoryManager.java:201)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Então o valor do campo "inputNumberSpinner" será "50" (FAILED)
(br.gov.frameworkdemoiselle.behave.exception.BehaveException: Elemento [inputNumberSpinner] não encontrado na página)
obs: o nome do id do elemento deve estar sendo gerado dinamicamente, provavelmente precisamos indicar o elemento atraves de outro ElementLocatorType
Bom dia! Aqui apresenta o seguinte erro:
Failed to run story stories/teste.storyConverted br.gov.frameworkdemoiselle.behave.exception.BehaveException: Erro Inesperado, Unable to locate frame: 3 Command duration or timeout: 10.07 seconds Build info: version: '2.37.1', revision: 'a7c61cbd68657e133ae96672cf995890bad2ee42', time: '2013-10-21 09:08:07' System info: host: 'serpro-1552837', ip: '10.15.36.231', os.name: 'Linux', os.arch: 'i386', os.version: '2.6.38-10-generic-pae', java.version: '1.6.0_20' Session ID: a5273213-8667-4ee5-ae5a-c38ff9e88673 Driver info: org.openqa.selenium.firefox.FirefoxDriver Capabilities [{platform=LINUX, acceptSslCerts=true, javascriptEnabled=true, browserName=firefox, rotatable=false, locationContextEnabled=true, version=17.0.9, cssSelectorsEnabled=true, databaseEnabled=true, handlesAlerts=true, browserConnectionEnabled=true, nativeEvents=true, webStorageEnabled=true, applicationCacheEnabled=true, takesScreenshot=true}] at br.gov.frameworkdemoiselle.behave.runner.webdriver.ui.WebBase.getElements(WebBase.java:126) at br.gov.frameworkdemoiselle.behave.runner.webdriver.ui.WebBase.waitElement(WebBase.java:167) at br.gov.frameworkdemoiselle.behave.runner.webdriver.ui.WebButton.click(WebButton.java:46) at br.gov.frameworkdemoiselle.behave.parser.jbehave.CommonSteps.clickButton(CommonSteps.java:129)
Está dando erro ainda no waitElement() quando passa pelo getElements(). Parece o erro dispara dentro do componente do Selenium: Caused by: org.openqa.selenium.remote.ErrorHandler$UnknownServerException: Unable to locate frame: 3
Testei ativando o frame antes e sem ativar. Ambas as formas não funcionaram.
Obs.: O sistema que estou testando possui um iframe dentro de outro frame. Mas aplicando switchTo() do WebDriver foi possível manipular o objeto.
Dúvida: É possível eu indicar o frame em que o objeto está localizado no mapeamento de telas e campos? Acho que dessa forma não precisaria indicar na história o frame que devo ativar e também não seria necessário varrer todos os frames da página.
@ticianatoffoli, também observei as falhas, mas agora o erro é do próprio teste e não mais do DBehave.
@rkazuo, como estamos tratando neste tópico apenas o projeto mix. Sugiro que abra uma nova issue para discutirmos o assunto específico de frames, Blz?
Lançada a versão 1.3.2-BETA1 com os projetos de exemplo corrigidos.
Test set: demoisellebehave.mix.tests.AllTest
Tests run: 7, Failures: 2, Errors: 0, Skipped: 0, Time elapsed: 124.666 sec <<< FAILURE! testIFrames(demoisellebehave.mix.tests.AllTest) Time elapsed: 47.387 sec <<< FAILURE! java.lang.AssertionError: Passo com falha: [Quando clico em "Avisos para o Rational Solution for CLM"] causa: Quando clico em "Avisos para o Rational Solution for CLM" at org.junit.Assert.fail(Assert.java:91) at br.gov.frameworkdemoiselle.behave.controller.BehaveContext.run(BehaveContext.java:125) at br.gov.frameworkdemoiselle.behave.controller.BehaveContext.run(BehaveContext.java:143) at demoisellebehave.mix.tests.AllTest.testIFrames(AllTest.java:24) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53) at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123) at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164) at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110) at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175) at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107) at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68)
testColor(demoisellebehave.mix.tests.AllTest) Time elapsed: 10.534 sec <<< FAILURE! java.lang.AssertionError: Passo com falha: [E será exibido o "Botao Sair" com estilo "background-color:red"] causa: E será exibido o "Botao Sair" com estilo "background-color:red" at org.junit.Assert.fail(Assert.java:91) at br.gov.frameworkdemoiselle.behave.controller.BehaveContext.run(BehaveContext.java:125) at br.gov.frameworkdemoiselle.behave.controller.BehaveContext.run(BehaveContext.java:143) at demoisellebehave.mix.tests.AllTest.testColor(AllTest.java:50) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53) at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123) at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164) at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110) at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175) at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107) at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68)