如何在selenium webdriver,Js中获取文本框的价值

时间:2015-07-01 11:12:20

标签: javascript node.js selenium-chromedriver

我正在努力获取文本框的实际文本,因为我需要它作为文本将其存储在变量中而不是将其与值进行比较,因为我需要将它添加到文本框的末尾。 url调用另一个页面。

我尝试使用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"}

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

WebdriverJS纯粹是异步的。意思是,您需要提供回调并在回调中实例化您的变量,而不是简单地将调用函数的结果赋值给您的变量。

这就是为什么每次你控制时都会得到一个承诺。记录你的access_token变量。 webdriverjs文档解释了一下在selenium-webdriver ANS Forth Specification

中如何使用promises

您可以执行以下操作将文本分配给变量:

packages="­linux-imag­e-3.2.0-4-­amd64 linux­-libc-dev linux­-headers-3­.2.0-4-amd­64 linux­-headers-3­.2.0-4-com­mon dnsutils mysql-server-5.5"
exclusion="dnsutils mysql-server-5.5"

我强烈推荐WebdriverIO,因为它消除了必须编写自己的承诺的痛苦。 https://code.google.com/p/selenium/wiki/WebDriverJs#Understanding_the_API

答案 1 :(得分:1)

我不确定您使用的是哪个版本的Webdriver,但是使用WebdriverIO可能会有一些运气。具体来说,它的getText()函数将返回带有文本的回调,以便您可以在其他地方使用它。

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

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

答案 2 :(得分:0)

所以这是我必须学习的方法,所以我希望这会有所帮助:

var access_token = await driver.findElement(webdriver.By.name("AccToken"))
    .getAttribute("value")
    .then((value) => { return value; });

答案 3 :(得分:0)

如果您只是想获取价值,这应该可以正常工作。如果您使用的是新的await ES6语法,则无需“那么”答应。

const { Builder, By, Key, until } = require('selenium-webdriver');
const assert = require('assert');
    
let access_token = await driver.findElement(By.name("AccToken")).getAttribute("value");

然后您甚至可以断言:

assert.equal(access_token, "your token value here");

有关更多信息,请参见selenium-webdriver的文档。仔细看看Webdriver实例方法。祝你好运!