Мотивация
Использовать механизм селектора CSS Selenium вместе с селекторами атрибутов CSS и настраиваемым атрибутом HTML5 data-
для обращения к определенным хукам для элементов.
Проблема
При использовании вышеуказанного для поиска элемента, которому присвоено имя класса CSS и атрибут data-
, возникает следующее исключение:
Caused by: org.openqa.selenium.remote.ErrorHandler$UnknownServerException: The given selector .gs-a-btn["data-value"] is either invalid or does not result in a WebElement. The following error occurred:
[Exception... "An invalid or illegal string was specified" code: "12" nsresult: "0x8053000c (NS_ERROR_DOM_SYNTAX_ERR)" location: "file:///C:/DOCUME~1/eliranm/LOCALS~1/Temp/anonymous6109849275533680625webdriver-profile/extensions/[email protected]/components/driver_component.js Line: 5956"]
Build info: version: '2.23.1', revision: '17143', time: '2012-06-08 18:59:28'
System info: os.name: 'Windows XP', os.arch: 'x86', os.version: '5.1', java.version: '1.6.0_31'
Driver info: driver.version: unknown
at <anonymous class>.<anonymous method>(file:///C:/DOCUME~1/eliranm/LOCALS~1/Temp/anonymous6109849275533680625webdriver-profile/extensions/[email protected]/components/driver_component.js:6537)
Соответствующий код
public void previous(String type) {
By cssSelector = By.cssSelector(".gs-a-btn[data-value='" + type + "']");
driver.findElement(cssSelector).click();
}
Что я пробовал
- замена одинарных кавычек на экранированные двойные кавычки внутри запроса селектора атрибутов.
- указание селектора атрибута вместо селектора значения атрибута, то есть
".gs-a-btn[\"data-value\"]"
, а не".gs-a-btn[data-value='" + type + "']"
. - # P3 #
# P4 #
type
? - person BoltClock   schedule 19.06.2012By.cssSelector
с помощью селекторов атрибутов кажется медленнее, чем простое использованиеBy.className
. время от времени он дает сбой. - person Eliran Malka   schedule 19.06.2012By.className
внутренне использует (по крайней мере, в Firefox)document.getElementsByClassName()
(который кэшируется) и, следовательно, должен быть почти мгновенным.By.cssSelector
используетdocument.querySelector()
иdocument.querySelectorAll()
, что требует времени для анализа и обработки. Если это проблема времени, я бы ожидал случайногоNoSuchElementException
(который можно исправить), а не странногоUnknownServerException
. - person Petr Janeček   schedule 01.07.2012