Как избежать ошибки имени составного класса в объекте страницы?
Когда я пытаюсь использовать имя класса, который имеет пробел 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. Также попробуйте использовать имена классов, так как несколько объектов будут иметь одинаковое имя класса.