我有一个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无法执行脚本。
答案 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