Duvida automação com selenium Webdriver

Eu não consigo selecionar nenhuma opção do combo, atualmente meu código está assim:

	@Test
	public void testCriarChamado() throws Exception {
		driver.manage().window().maximize();
		driver.findElement(By.id("lnkChamados")).click();
		driver.findElement(By.id("lnkChamadoCriar")).click();

		
		 WebElement select = driver.findElement(By.id("cmbCliente"));
		    List<WebElement> options = select.findElements(By.name("ctl00$body$cmbCliente"));
		    for(WebElement option : options){
		        if(option.getText().equals("Dinamo-Itapua")) {
		            option.click();
		            break;
		        }
		        
		       
		    }
Select dropdown = new Select(driver.findElement(By.id("cmbCliente")));

dropdown.selectByVisibleText("Ahb-Caraubas ");

ou

 dropdown.selectByValue("92");

@Leonardo-Galani com o código que vc me passou, retorna o erro abaixo:

CriarChamado (2)
gbhelpdesk.CriarChamado
testCriarChamado(gbhelpdesk.CriarChamado)
org.openqa.selenium.NoSuchElementException: Cannot locate element with text: Ahb-Caraubas 
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '2.53.1', revision: 'a36b8b1', time: '2016-06-30 17:32:46'
System info: host: 'NOT002', ip: '169.254.218.171', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.8.0_101'
Driver info: driver.version: unknown

	at org.openqa.selenium.support.ui.Select.selectByVisibleText(Select.java:150)

	at gbhelpdesk.CriarChamado.testCriarChamado(CriarChamado.java:51)

	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

	at java.lang.reflect.Method.invoke(Unknown Source)

	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)

	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)

	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)

	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)

	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)

	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)

	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)

	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)

	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)

	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)

	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)

	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)

	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)

	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)

	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)

	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)

	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)

	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)

	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)

	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)




Opa, beleza?

Seguinte

WebElement select = driver.findElement(By.id("cmbCliente"));

Tu por acaso não precisa clicar para essa lista ficar visível?

Algo tipo:

WebElement select = driver.findElement(By.id("cmbCliente"));
select.click();
continue o código aqui...

??

Coloquei o código assim:

	@Test
	public void testCriarChamado() throws Exception {
		driver.manage().window().maximize();
		driver.findElement(By.id("lnkChamados")).click();
		driver.findElement(By.id("lnkChamadoCriar")).click();

		WebElement select = driver.findElement(By.id("cmbCliente"));
		select.click();
		Select dropdown = new Select(driver.findElement(By.id("cmbCliente")));
		dropdown.selectByVisibleText("Ahb-Caraubas ");

	}

E o seguinte erro é retornado:

CriarChamado (2)
gbhelpdesk.CriarChamado
testCriarChamado(gbhelpdesk.CriarChamado)
org.openqa.selenium.ElementNotVisibleException: element not visible
  (Session info: chrome=52.0.2743.116)
  (Driver info: chromedriver=2.23.409699 (49b0fa931cda1caad0ae15b7d1b68004acd05129),platform=Windows NT 6.1.7601 SP1 x86) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 35 milliseconds
Build info: version: '2.53.1', revision: 'a36b8b1', time: '2016-06-30 17:32:46'
System info: host: 'NOT002', ip: '169.254.218.171', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.8.0_101'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, networkConnectionEnabled=false, chrome={chromedriverVersion=2.23.409699 (49b0fa931cda1caad0ae15b7d1b68004acd05129), userDataDir=C:\Users\nvsantos\AppData\Local\Temp\scoped_dir7060_5365}, takesHeapSnapshot=true, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=52.0.2743.116, platform=XP, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}]
Session ID: 4bde5179e92be9dbcebff5082a0beb5a

	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)

	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)

	at java.lang.reflect.Constructor.newInstance(Unknown Source)

	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.RemoteWebElement.execute(RemoteWebElement.java:327)

	at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:85)

	at gbhelpdesk.CriarChamado.testCriarChamado(CriarChamado.java:49)

	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

	at java.lang.reflect.Method.invoke(Unknown Source)

	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)

	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)

	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)

	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)

	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)

	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)

	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)

	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)

	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)

	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)

	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)

	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)

	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)

	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)

	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)

	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)

	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)

	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)

	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)

	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)




Opa beleza??
Quando falei do .click me referia ao primeiro código que usou.

	@Test
	public void testCriarChamado() throws Exception {
		driver.manage().window().maximize();
		driver.findElement(By.id("lnkChamados")).click();
		driver.findElement(By.id("lnkChamadoCriar")).click();

		
		 WebElement select = driver.findElement(By.id("cmbCliente"));
select.click();
		    List<WebElement> options = select.findElements(By.name("não esse elemento, mas outro"));
		    for(WebElement option : options){
		        if(option.getText().equals("Dinamo-Itapua")) {
		            option.click();
		            break;
		        }
		        
		       
		    }

Ps: Só nota que deixei um comentário em uma busca dos elementos. Notei que o erro era na linha 49 do teu código, qual trecho é apresentado nessa linha?

o que estava na linha 49 era :

List<WebElement> options = select.findElements(By.name("ctl00$body$cmbCliente"));

Eu não sei qual elemento colocar no lugar do “ctl00$body$cmbCliente”

pq no código html esta assim:

<div id="divChamadoCliente" class="divConteudoCombo">
<span id="lblCliente">Cliente:</span>
<select id="cmbCliente" data-bind="combobox: clienteSelecionado, options: clientes, optionsValue: 'id', optionsText: 'nome'" name="ctl00$body$cmbCliente" style="display: none;">

Se eu postar aqui o código exportado do selenium IDE ajuda?

@nayavsantos disse em Duvida automação com selenium Webdriver:

“ctl00$body$cmbCliente”

Esse elemento pode ser dinamico e com isso estar gerando esse erro, já tentou ver algo relacionado com css ou tentar o mesmo id que usou para clicar antes??

(Sugiro uma procura no google sobre como captar elementos com webdriver …) :+1:

@Ramses-Saccol-de-Almeida com id eu ja tentei, com o css tbm mas não sei se foi da forma correta, vou fazer um pesquisa no google sobre os elementos. Estou começando com o webdriver, mas estou com o prazo um pouco apertado aqui na empresa. De qualquer forma muito obrigada a atenção de todos! :)

O problema acontecia porque o elemento "Ahb-Caraubas " nao existe, e sim “Ahb-Caraubas”.

Tenta com o código do select que o Galani passou antes:

Select dropdown = new Select(driver.findElement(By.id("cmbCliente")));
dropdown.selectByVisibleText("Ahb-Caraubas");

@lgiacomini92 fiz o que vc falou, no primeiro fala do erro da linha 49, e corrigindo fala que o elemento não esta visível =(
Mesmo assim, muito obrigada.

Me perdi já em tanto código hahah.

Não tem segredo pra selecionar uma option de um combobox. A única diferença é que, pra manipular comboboxes, vc precisa usar a classe Select.

Basta fazer:

WebElement element = driver.findElement(By.id("cmbCliente"));
Select dropdown = new Select(element); <-- Select precisa de um WebElement, que é o elemento <select> no html, esse com id "cmbCliente"

dropdown.selectByVIsibleText("Ahb-Caraubas");
OU
dropdown.selectByValue("92");

Faz exatamente assim e vê no que dá. Pelo que vi nas últimas respostas tinham umas coisas meio redundantes, deixa somente esse código que coloquei.

Abs

@nayavsantos

Nesse código que vc postou vc tá criando o WebElement select, mas na hora de dar new Select vc tá buscando pelo elemento de novo. Deveria ser:

WebElement select = driver.findElement(By.id("cmbCliente"));
select.click();
Select dropdown = new Select(element);

Em paralelo aos seus problemas, te dou um conselho: use Page Objects. Isso vai facilitar muito sua vida conforme a cobertura dos testes for aumentando.

O @andrethiago criou um post sobre isso, dá uma lida quando tiver um tempo ;)

usually this error happens by selenium does not support the version of Firefox you should have to updates Firefox or try in different browser

Log in to reply

Looks like your connection to Agile Testers was lost, please wait while we try to reconnect.