【问题标题】:JavaScriptexecutor setAttribute value on selenium硒上的JavaScriptexecutor setAttribute值
【发布时间】:2017-07-15 08:10:15
【问题描述】:

我在 IE11 上执行 selenium 自动化。现在对于一个元素,比如说 ele; ele.sendKeys(characters) 不能直接工作。所以我试图通过 JavaScript 执行器更改 <input> 标记的“值”属性。更改后,我将通过ele.getAttribute('value') 进行相同的验证。但是那个时候我得到这个值仍然像以前一样为空。我的测试也同样失败。

HTML 代码

<form id="upload" method="post" action="/upload" enctype="multipart/form-data" style="width: 90%">
<label for="uploadinputFile">
<br style="clear:all">
<input id="browse_file" class="bttn-primary" type="button" value="Browse">
<input id="file_input_browser" type="file" name="upload_File">
<div id="button">
<input id="submit" class="bttn-primary" type="submit" disabled="" value="Upload">
</div>
</form>

硒代码

WebElement brw=driver.findElement(By.id("file_input_browser"));
((JavascriptExecutor) driver).executeScript("document.getElementById('file_input_browser').setAttribute('value', 'new value for element')");
System.out.println("value:"+brw.getAttribute("value"));

我还使用了以下 JavaScriptExecutor: ((JavascriptExecutor) driver).executeScript("arguments[0].setAttribute('value', '" +c+"')",brw);//c 是一个字符串

但每次我将 brw.getAttribute("value") 的输出设为空白/空时

【问题讨论】:

  • .sendKeys() 到底有什么问题?代码会抛出一些异常吗?因为操作 DOM 只是一种解决方法。
  • 它没有抛出任何错误...selenium 代码正在运行..但由于某种原因,IE 没有像手动那样按预期提示。所以脚本一直在等待下一个元素的出现。问题是如果这个 SendKeys() 有效,那么只有 将被启用,我可以点击它。但由于 sendKeys 没有设置任何值,因此上传按钮保持禁用状态。
  • 手动单击 时会打开 Windows 默认文件选择以选择文件。在 Firefox 中,我单击该浏览器选项,然后通过 Robot 类选择文件。但是在 IE11 上,虽然点击正在发生,但没有弹出 windows 默认文件选择。所以我试图为这两个 标签做 sendKeys(filepath) 。但这也不起作用,然后我直接尝试通过 javaScriptExecutor 在 DOM 元素上注入文件路径。如果你能告诉我如何解决 Windows 默认文件选择弹出窗口,这也解决了我的目的。
  • 当我们在 IE 上手动单击该浏览器选项时,会弹出 windows 默认文件选择,但在自动单击该元素后,它无法打开。单击UI后的方法失败没有响应...它不会弹出该文件选择选项。我还尝试点击 Actions 类...谢谢 Adv.
  • 你能发一个链接到页面吗?

标签: javascript selenium selenium-webdriver internet-explorer-11


【解决方案1】:

您必须在操作 DOM 之后(而不是之前)实例化您的 WebElement。否则存储的WebElement 将不包含您要查找的信息,并将返回null

driver.executeScript("document.getElementById('ID').setAttribute('value','NEW_VALUE');");
System.out.print("value: "+driver.findElement(By.id("ID")).getAttribute("value"));

【讨论】:

  • 这很奇怪,我稍微编辑了我的帖子以更好地代表我测试的内容。发布的代码对我来说效果很好,但是我使用的是针对 Chrome 而不是 IE 运行的 Selenium 3.1.0 - 也许问题与 IE 相关。
  • 我正在尝试使用 IE11 的 selenium 2.53.1...让我再次检查一下最新的 selenium...
猜你喜欢
  • 2022-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-23
  • 2021-12-21
  • 2019-10-21
  • 1970-01-01
相关资源
最近更新 更多