CSS локаторы и совместимость с браузерами


(breakmt) #1

Возник вопрос - при использовании локаторов в виде CSS - нужно ли думать о их совместимости с браузерами? Вопрос возник потому что тут указано что nth-child не поддерживается в IE8, но я все же попробовал запустить тест на IE8 с локатором

.tableProc tr:nth-child(2) td:nth-child(2)

и элемент был найдет. Как это так?


(Stan) #2

уверены что поддерживает? проверил у себя - не работает


(breakmt) #3

Да, проверил еще раз - работает. Версия IE 8.0.7601.17514.

А не может быть дело в IEDriverServer? У меня стоит 2.46


(Дмитрий Жарий) #4

nth-child не поддерживается IE8, за счет того, что в то время, эта функция не была реализована.
Вы можете воспроизвести это даже в IE11 поставив эмуляцию IE8.

Внутри WebDriver для поиска элемента вызывается функция JavaScript (а точнее DOM):
document.querySelector

Тем не менее, многие разработчики использую polyfill -- хаки позволяющие добавить старым браузером функционал из новых версий. JavaScript это позволяет сделать.

Можете, например, в консоле браузера выполнить команду:

document.querySelector = alert;

И после каждого вызова вместо поиска селектора вы увидите сообщение с текстом селектора.

document.querySelector("a:nth-child(2)");

Я подозреваю, то на том сайте который вы тестируете как раз используется такой polyfill.


(vmaximv) #5

Это "косяк" IEDriverServer'a

D 2015-07-29 09:26:10:984 ElementFinder.cpp(40) Element location strategy is CSS selectors, but document does not support CSS selectors. Falling back to using the Sizzle JavaScript CSS selector engine.
T 2015-07-29 09:26:10:984 ElementFinder.cpp(170) Entering ElementFinder::FindElementUsingSizzle

Т.е. используется sizzle, вместо нативной реализации. Рискну предположить, что в других версиях ИЕ будет тоже самое.
Как только всплывет (или кто-то отпишется баг-репортом, или само-собой - когда "выпилят" sizzle) - это закроют - и все вернется на круги своя.
Так что верьте лучше "табличкам" smile


(Дмитрий Жарий) #6

Точно smiley А я посмотрел на

TODO: Add support for using sizzle to locate elements

И на этом успокоился, приняв решение что его там нет