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

Когда я пытаюсь использовать имя класса, который имеет пробел class = "country name" На странице объекта я получаю:

Compound class names not permitted Selenium::WebDriver::Error::UnknownError)

Как я могу использовать имя класса, который имеет пробел.

Например:

class = "country name"

5 ответов

Решение

Вместо этого используйте селектор CSS:

.country.name

Важно отметить, что этот пример неверен! Если "country name" подразумевается как название страны, то есть. В именах классов не должно быть пробелов. На самом деле, class Атрибут - это разделенный пробелами список классов. Это означает, что если у вас есть класс country name, это не один класс, это два разных класса, к которым принадлежит ваш элемент - первый countryвторое name!

Поэтому исправьте свои занятия, если они не правы. Если это не так, используйте селектор CSS, это единственный надежный способ сопоставления нескольких классов (кроме очень длинного и сложного выражения XPath). Не используйте тривиальные выражения XPath или селекторы CSS с наивным сравнением атрибутов (//*[@class='country name'] или же *[class='country name']), это просто неправильно.

Вы можете использовать с этим

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']");

Вы можете использовать одно из этих имен классов, например

:class => 'country' 

или же

:class => 'name'

если это не поможет, тогда вам следует переключиться на использование другого типа селектора:css или:xpath

Но учтите, что в случае:css вы пишете:

:css => '.country.name'

и в случае:xpath:

:xpath => '//div[@class='country code']

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

Вам придется либо удалить пробел из имени класса, и в этом случае Selenium по-прежнему теоретически должен найти нужные элементы, либо использовать селектор CSS и объединить его с точкой / точкой, чтобы объединить имена классов вместе.

то есть, используя селектор CSS для этого:

<div class="country code"></div>

Вы можете использовать:

div.country.code

или вы можете сделать свой селектор немного более сложным:

div[class='country code']

Если у вас есть имена классов, в которых есть пробелы, вы получите эту ошибку. Одним из способов избежать является создание xpath для идентификации элемента. Если вы показываете HTML, я могу создать xpath. Также попробуйте использовать имена классов, так как несколько объектов будут иметь одинаковое имя класса.

Другие вопросы по тегам