2014-11-03 93 views
0

这里是基于我过去的Python项目(在这里我使用JavaScript)我已经尝试了几个例子...JavaScript - 使用selenium-webdriver将内部html返回给变量?

var eltext = driver.findElement(webdriver.By.className('el')).text; 
console.log(elname); 

var eltext = driver.findElement(webdriver.By.className('el')).innerText; 
console.log(elname); 

var eltext = driver.findElement(webdriver.By.className('el')).innerHTML; 
console.log(elname); 

我也尝试了一些其他方式使用String()JSON.stringify(),以及各种用于循环,旋转我的选择。我可以做一个.click()这个对象是可点击的,所以我知道我的选择器是正确的,但访问JavaScript中的内部文本是一个问题。

回答

1

这里是你如何能做到这:

var webdriver = require('selenium-webdriver'); 

var driver = new webdriver.Builder(). 
    withCapabilities(webdriver.Capabilities.chrome()). 
    build(); 

driver.get('http://www.example.com'); 

var el = driver.findElement(webdriver.By.tagName('div')); 

// Get the text of the element using getText... 
el.getText().then(function (text) { 
    console.log(text); 
}); 

// The code above could be shortened to this: 
// el.getText().then(console.log); 

// Get the inner HTML of the element using getInnerHtml... 
el.getInnerHtml().then(function (html) { 
    console.log(html); 
}); 

// The code above could be shortened to this: 
// el.getInnerHtml().then(console.log); 

// Get the text browser side plus the innerHTML at the same time. 
driver.executeScript('\ 
var el = arguments[0];\ 
return {text: el.innerText, html: el.innerHTML};\ 
', el).then(function (val) { 
    console.log(val.text); 
    console.log(val.html); 
}); 

driver.quit(); 

你必须使用.then,因为这些方法不返回值本身,而是承诺来获取值。

executeScript的最后一种方法同时得到两个值。如果您想知道为什么会打扰executeScript,原因是每次拨打getTextgetInnerHtml意味着Selenium客户端(您的脚本)和Selenium服务器(浏览器)之间的往返。在大型测试套件中,这些往返行程会累积,并可将分钟添加到套件的运行时间。我也将它放在那里,以表明您可以使用此方法在浏览器上运行任何JavaScript。

+0

我投了赞成性的答案,并将在早上与我的项目进行确认。如果这是真的,这看起来似乎与我承诺的许多问题分享了一些魔力。 – Shane 2014-11-06 04:56:46

0

您正在处理来自Selenium的WebElement,而不是DOM Element,因此请勿尝试使用您在浏览器中知道的DOM API。硒是一双不同的鞋子。

Selenium web driver docs指向getText()getInnerHtml()

+0

这是给我的findElement对象'{然后:[功能:那么], 取消:[功能:取消], isPending:[功能:isPending]}' – Shane 2014-11-04 00:11:49

+0

这是正确的,你获得[承诺](http://selenium.googlecode.com/git/docs/api/javascript/class_webdriver_promise_Promise.html)。 Promise在如今的Javasript中已经成为标准,因此您可以轻松找到一些关于如何使用它们的文档。 – Kos 2014-11-04 16:13:11