我正在努力获取文本框的实际文本,因为我需要它作为文本将其存储在变量中而不是将其与值进行比较,因为我需要将它添加到文本框的末尾。 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"}
有什么想法吗?
答案 0 :(得分:2)
WebdriverJS纯粹是异步的。意思是,您需要提供回调并在回调中实例化您的变量,而不是简单地将调用函数的结果赋值给您的变量。
这就是为什么每次你控制时都会得到一个承诺。记录你的access_token变量。 webdriverjs文档解释了一下在selenium-webdriver ANS Forth Specification
中如何使用promises您可以执行以下操作将文本分配给变量:
packages="linux-image-3.2.0-4-amd64 linux-libc-dev linux-headers-3.2.0-4-amd64 linux-headers-3.2.0-4-common 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实例方法。祝你好运!