WebDriver Javascript:如何在Firefox上关闭脚本时获得全面的DOM?

时间:2016-07-24 00:59:49

标签: javascript selenium firefox selenium-webdriver

我有一个HTML文件:

<div id="test">Hello World</div>
<script>document.getElementById("test").innerHTML = "Test";</script>

将Selenium Webdriver与Javascript Binding一起使用,我希望获得HTML文件的综合DOM,例如元素的属性列表,每个属性的命名空间,元素的命名空间等等。

我使用executeScript方法来提取它,因为Selenium还没有那个API,例如:

driver.executeScript("return document.lastChild.attributes.length;");

问题是,我想在关闭脚本时提取HTML文件的DOM。我在Chrome上关闭了javascript,仍然可以从Selenium执行脚本来获取DOM。但是当涉及到Firefox时,遗憾的是我无法实现它。该脚本被阻止,我收到错误消息:

JavascriptError: waiting for evaluate.js load failed

我已经尝试通过设置about:config或者甚至让脚本拦截器添加像noscript和yesscript这样来启用和禁用javascript,但没有运气。似乎只是在该页面上关闭javascript时,Selenium无法执行脚本。

1 个答案:

答案 0 :(得分:0)

最后我找到了解决方案。无论如何它都是无效的,但这是从Selenium执行脚本而不使用executeScript方法的替代方法。调用浏览器控制台,编写脚本,将结果置于警报状态,然后从警报中获取文本。这是一个例子:

var script = 'alert("value you want to get");';
var act = new webdriver.ActionSequence(driver);
driver.findElement(webdriver.By.tagName('html')).sendKeys(Key.CONTROL + Key.SHIFT + 'k'); // Calling browser JS console
driver.switchTo().activeElement().sendKeys(Key.RETURN); // Switch focus to the console
act.sendKeys(script).sendKeys(Key.RETURN).perform(); // Write the script on the console
driver.switchTo().alert().getText().then(function (value) {
  console.log(value);
}); // Switch to and get the text from the alert
driver.switchTo().alert().accept(); // Close the alert box