Los nombres de clases compuestas no son compatibles con el error en WebDriver

Tengo un método para contar la cantidad de elementos en divs y para devolver su número.

  public int getNumberOfOpenBets() { openBetsSlip = driver.findElement(By.id("form_open_bets")); openBets = openBetsSlip.findElements(By.className(" cashout_noCash")); return openBets.size(); } 

Esa es la fuente de la página

 

WebDriver está arrojando el siguiente error: los nombres de clases compuestas no son compatibles. Considere buscar un nombre de clase y filtrar los resultados o usar selectores de CSS.

 org.openqa.selenium.InvalidSelectorException: Compound class names are not supported. Consider searching for one class name and filtering the results or use CSS selectors. For documentation on this error, please visit: http://seleniumhq.org/exceptions/invalid_selector_exception.html Build info: version: '2.31.0', revision: '1bd294d185a80fa4206dfeab80ba773c04ac33c0', time: '2013-02-27 13:51:26' System info: os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.7.0_17' Driver info: driver.version: unknown at org.openqa.selenium.By.className(By.java:131) at elements.betslip.Betslip.getNumberOfOpenBets(Betslip.java:136) at testSomething(SomethingTest.java:117) 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:47) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) at org.junit.runners.ParentRunner.run(ParentRunner.java:309) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 

EDITAR:

Al final resultó que WerbDriver no admite espacios en los nombres de clase, omg.

¿Podrían ayudarme por favor a usar CSS selector de CSS en esta situación para encontrar los elementos?

Esto es exactamente como se esperaba. Si su nombre de clase incluye un espacio, WebDriver lo verá como un “selector compuesto”. Puede eliminar el espacio en su localizador By.className() , que aún debe encontrar los elementos que está buscando; o puede pasar a buscar por selectores de CSS, usando algo como By.cssSelector(".cashout_noCash") , que ofrecen mucha más flexibilidad para una funcionalidad similar. Esto es exactamente lo que dice el mensaje de excepción.

Puede incluir selectores de nombres de clases compuestos sin dejar espacio entre ninguno de ellos.

Por ejemplo, si tu div es:

 

Entonces tu selector será:

 driver.findElement(By.cssSelector("k-calendar-container.k-popup.k-group.k-reset")); 

Aquí hay una respuesta Ruby si alguien lo necesita. La conclusión a la que llegué es que algunas de las soluciones que funcionaron para Java arriba no funcionan en mi máquina o no funcionan para Ruby en absoluto (aunque no estoy seguro de cuál es el caso).

Si el html es:

  access web portal  

El formato para encontrar este elemento sería:

 logInBtn = driver.find_element(:css, ".button.orange-bg") 

Lo usé porque lo siguiente no funcionaría:

  1. Reemplazando los espacios con ‘.’ y encontrando por selector css (necesitas poner un punto en el frente).

  2. Eliminar los espacios en el nombre de clase compuesto y usar el localizador de nombre de clase.

 driver.findElements(By.cssSelector(".cashout_noCash"));