Я очищаю все атрибуты элемента с помощью JavaScript, используя следующий код:
((JavascriptExecutor) driver).executeScript("var items = {}; for (index = 0; index < arguments[0].attributes.length; ++index) { items[arguments[0].attributes[index].name] = arguments[0].attributes[index].value}; return items;", element);
Хотя это в основном возвращает только атрибуты, которые идентифицируют рассматриваемый элемент. Я считаю, что этот код возвращает определенные атрибуты, которые на самом деле не соответствуют требуемому элементу.
Показательный пример:
Если вы перейдете к http://google.com и определите поле поиска с помощью (.//input[contains (@role,'combobox')])
(или любого другого из многих XPath), а затем выполните указанный код JS, он вернет атрибут (.//input[contains (@class,'gsfi lst-d-f')])
, который на самом деле не соответствует окно поиска. На самом деле, этот атрибут даже не присутствует на странице при использовании FireBug.
Я заметил, что подобный текст скрыт в теге стиля на странице, но даже там я не нашел точного соответствия этому тексту. В любом случае он все еще не соответствует рассматриваемому элементу.
Почему JS возвращает этот текст и есть ли способ его обойти?
Спасибо