Как избежать ошибки имени составного класса в объекте страницы?

Когда я пытаюсь использовать имя класса с пробелом 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']

оба должны работать