By.className ("classname") и By.cssSelector ("[class = 'classname']") возвращает различное количество элементов в селене - PullRequest
1 голос
/ 23 июня 2019

Я изучаю Selenium и столкнулся с проблемой, когда я вижу, что By.cssSelector ("[class = 'day']") и By.className ("day") возвращают разное количество элементов, хотя оба являются то же самое.

Я вижу, что когда я использую By.className ("день"), в календаре также выбираются отключенные даты, когда в идеале это не следует делать, поскольку именем класса для этих отключенных дат является "старый день", а не "день".

driver.get ( "https://www.path2usa.com/travel-companions");

.

driver.findElement (By.name ( "travel_date")) нажмите ();

Элементы списка = driver.findElements (By.cssSelector ("[class 'День'] "));

Список элементов1 = driver.findElements (By.className ("day"));

System.out.println (elements.size ());

System.out.println (elements1.size ());

Ожидается: 30 элементов должны быть возвращены. Актуально: С помощью селектора Css - я вижу 30, но с именем класса - я вижу 42.

1 Ответ

0 голосов
/ 23 июня 2019

Я считаю, что проблема в следующем:

By.className("cls") возвращает элементы, которые имеют этот класс, например:

  • <span class="cls">
  • <span class="cls other values here">
  • <span class="any-combination cls of-classes">

By.cssSelector("[class='cls']") возвращает элементы с атрибутом class, точно равным выражению в кавычках, например:

  • <span class="cls">
  • и ничего больше

Примечание: только что проверил это на сайте, на который вы ссылались (после открытия календаря), и похоже, что это правда:

  • $('.day').length == 42
  • $('[class=day]').length == 31
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...