Как избежать ошибки имени составного класса в объекте страницы?
Когда я пытаюсь использовать имя класса с пробелом class = "country name"
в объекте страницы, я получаю:
Compound class names not permitted Selenium::WebDriver::Error::UnknownError)
Как использовать имя класса с пробелом.
Например:
class = "country name"
Ответы
Ответ 1
Вместо этого используйте селектор CSS:
.country.name
Важно отметить, что этот пример неверен! Если "country name"
означает название страны, то есть. Имена классов не могут содержать пробелы. Фактически, атрибут class
- это список классов, разделенных пробелами. Это означает, что если у вас есть класс country name
, это не один класс, это два разных класса, к которым принадлежит ваш элемент: первый - country
, второй - name
!
Поэтому, исправьте свои классы, если они ошибаются. Если это не так, используйте селектор CSS, это единственный надежный способ сопоставить несколько классов (кроме очень длинного и сложного выражения XPath). Не используйте тривиальные выражения XPath или селектор CSS с наивным сопоставлением атрибутов (//*[@class='country name']
или *[class='country name']
), что просто неверно.
Ответ 2
Вы можете использовать с этим
By.cssSelector("*[class^='classname']");
^ is for if you entering beginning of the class name,
$ is for if you entering ending of the class name usage example below with sample class name: tech random corner text_left
By.cssSelector("*[class^='tech']");
By.cssSelector("*[class$='text_left']");
Ответ 3
Если у вас есть имена классов, в которых есть пробелы, вы получите эту ошибку. Один из способов избежать - создать xpath для идентификации элемента. Если вы покажете html, я могу создать xpath. Также попробуйте использовать имена классов, поскольку несколько объектов будут иметь одно и то же имя класса.
Ответ 4
Вам придется либо удалить пробел из имени класса, и в этом случае Selenium должен теоретически находить нужные элементы или использовать селектор CSS и объединить его с периодом/полной остановкой, чтобы объединить имена классов вместе,
i.e, используя селектор CSS для таргетинга на это:
<div class="country code"></div>
Вы можете использовать:
div.country.code
или, вы можете сделать свой селектор более сложным:
div[class='country code']
Ответ 5
Вы можете использовать одно из этих имен классов, например
:class => 'country'
или
:class => 'name'
если это не поможет вам, вы должны переключиться на использование другого типа селектора: css или: xpath
Заметим, что в случае: css вы пишете:
:css => '.country.name'
и в случае: xpath:
:xpath => '//div[@class='country code']
оба должны работать