JavaScript: вставка атрибута ID в тег ‹input› с помощью XPATH

Я пытаюсь что-то автоматизировать с помощью селена, проблема в том, что у тега нет идентификатора, поэтому я нахожу элемент управления с помощью xpath и JS:

document.evaluate('/html/body/header[2]/div[2]/div/div[1]/div[1]/div/div/div/form/fieldset/div[1]/input', документ, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue

и это ответ из консоли хрома:

<input> type="file" data-autosubmitoff="true" accept=".xls,.csv,.xlsx" name="File" class="hidden"></input>

что означает, что он нашел мой контроль с помощью xpath, теперь я хочу ввести идентификатор, чтобы я мог ссылаться на него из селена.

Я пытался сделать это так:

document.evaluate('/html/body/header[2]/div[2]/div/div[1]/div[1]/div/div/div/form/fieldset/div[1]/input', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.innerHTML='input id="UploadedFileFilter" type="file" data-autosubmitoff="true" accept=".xls,.csv,.xlsx" name="File" class="hidden">'

в основном переписывая весь тег с идентификатором в нем, и консоль соответственно отвечает этим ответом:

input id="UploadedFileFilter" type="file" data-autosubmitoff="true" accept=".xls,.csv,.xlsx" name="File" class="hidden">"

ИДЕАЛЬНО! но когда я смотрю в DOM, входной тег все еще старый, что я делаю неправильно?

Спасибо.


person Jay Berko    schedule 15.12.2016    source источник


Ответы (1)


Вместо того, чтобы редактировать HTML напрямую, попробуйте просто установить значение id следующим образом:

var path = '/html/body/header[2]/div[2]/div/div[1]/div[1]/div/div/div/form/fieldset/div[1]/input';
var element = document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
element.id = 'UploadedFileFilter';

Также стоит отметить, что innerHTML — это HTML, содержащийся в элементе. Для редактирования HTML самого элемента вы можете использовать outerHTML.

person Bastiaanus    schedule 15.12.2016