2015-07-01 93 views
1

我很努力地獲取文本框的實際文本,因爲我需要它作爲文本存儲在變量中,而不是將其與值進行比較,因爲我需要將其添加到URL的末尾以調用另一個頁面。如何獲得selenium webdriver中的文本框的值,Js

我試圖使用ebeal建議的代碼,但它並沒有做什麼,我想:

var access_token = driver.findElement(webdriver.By.name("AccToken")) 
         .getAttribute("value") 
         .then(console.log); 

// This outputs the right result but only to the console as I can't save it to a variable 

var access_token = driver.findElement(webdriver.By.name("AccToken")) 
         .getText(); 

access_token = access_token.then(function(value){ 
            console.log(value); 
           }); 

console.log("the new one : " + access_token); 
// this one outputs : the new one:  Promise::304 {[[PromiseStatus]]: "pending"} 

任何想法?

回答

1

我不確定您使用的是哪個版本的Webdriver,但使用WebdriverIO可能會有一些運氣。具體來說,它的getText()函數將返回一個回調文本,以便您可以在其他地方使用它。

http://webdriver.io/api/property/getText.html

client.getText('#elem').then(function(text) { 
    console.log(text); 
}); 
1

WebdriverJS純粹是異步的。這意味着,您需要提供回調並在回調中實例化您的變量,而不是將函數的結果簡單地分配給您的變量。

這就是爲什麼你每次使用console.log你的access_token變量都會得到承諾的原因。該webdriverjs文檔解釋一點有關承諾,在硒的webdriver如何工作https://code.google.com/p/selenium/wiki/WebDriverJs#Understanding_the_API

你可以做以下的文本分配給一個變量:

var access_token;  

var promise = driver.findElement(webdriver.By.name("AccToken")).getText(); 

promise.then(function(text) { 
    access_token = text; 
}); 

我強烈建議WebdriverIO,因爲它從痛苦帶走不得不寫你自己的承諾。 http://webdriver.io/

相關問題