Условные имена classов не поддерживают ошибку в WebDriver
У меня есть метод подсчета количества элементов в divs
и возврата их числа.
public int getNumberOfOpenBets() { openBetsSlip = driver.findElement(By.id("form_open_bets")); openBets = openBetsSlip.findElements(By.className(" cashout_noCash")); return openBets.size(); }
Это источник страницы
WebDriver выбрасывает следующую ошибку: Объединенные имена classов не поддерживаются. Рассмотрите возможность поиска одного имени classа и фильтрации результатов или используйте селекторов CSS.
- Какой лучший и быстрый способ найти элемент с помощью webdriver? By.XPath или By.ID или что-нибудь еще? И почему?
- Selenium WebDriver - ошибка FirefoxDriver: не удалось запустить сокет в 45000
- Selenium WebDriver выбрасывает исключения времени ожидания спорадически
- Как разрешить исключение Stale? если элемент больше не привязан к DOM?
- Selenium WebDriver: Подождите, пока сложная страница с JavaScript для загрузки
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)
РЕДАКТИРОВАТЬ:
Как оказалось, WerbDriver
не поддерживает пробелы в именах classов, omg.
Не могли бы вы, ребята, помочь мне использовать селектор CSS
в этой ситуации, чтобы найти элементы?
- Почему нужно предпочитать использование CSS поверх XPath в IE?
- Какова связь между Selenium RC и WebDriver?
- Selenium WebDriver Как решить проблему исключения устаревших элементов?
- Эквивалент waitForVisible / waitForElementPresent в тестах Selenium WebDriver с использованием Java?
- Selenium 2 Webdriver и сертификат безопасности IE 9
- Дождитесь загрузки страницы в Selenium
- Как закрыть браузер всплывающее окно Selenium WebDriver
- Webdriver: загрузка файла
Это точно так, как ожидалось. Если ваше имя classа содержит пробел, WebDriver увидит его как «составной селектор». Вы можете либо удалить пробел в By.className()
, который все равно должен найти By.className()
вам элементы; или вы можете перейти к поиску с помощью селекторов CSS, используя что-то вроде By.cssSelector(".cashout_noCash")
, которые предлагают гораздо большую гибкость для аналогичной функциональности. Это именно то, что говорит сообщение об исключении.
Вы можете включать селектор имен сложных classов, не оставляя промежутков между ними.
Например, если ваш div
:
Тогда ваш selector
будет:
driver.findElement(By.cssSelector("k-calendar-container.k-popup.k-group.k-reset"));
Вот ответ Ruby, если кому-то это нужно. Я пришел к выводу, что некоторые из решений, которые работали над java выше, либо не работают на моей машине, либо вообще не работают для Ruby (хотя я не уверен, что это так).
Если html:
access web portal
Формат для поиска этого элемента:
logInBtn = driver.find_element(:css, ".button.orange-bg")
Я использовал это, потому что следующее не получилось:
-
Замена пробелов на «.» и поиск с помощью селектора css (вам нужно поставить период спереди).
-
Удаление пробелов в имени составного classа и использование локатора имен classов.
driver.findElements(By.cssSelector(".cashout_noCash"));