JavaScript : 通过 XPATH 将 ID 属性注入 <input> 标签

JavaScript : injecting ID attribute to an <input> tag by XPATH

我正在尝试使用 selenium 自动执行某些操作,问题是标签没有 ID,因此我正在使用 xpath 和 JS 找到控件:

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

这是 chrome 控制台的响应:

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

这意味着它通过 xpath 找到了我的控件,现在我想注入一个 ID 以便我可以从 selenium 中引用它。

我试过这样做:

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">'

基本上用其中的 ID 重写整个标签,控制台相应地响应这个答案:

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

完美!但是当我查看 DOM 时,输入标签仍然是旧标签,我哪里错了?

谢谢。

与其直接编辑 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.