2014-11-03 60 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