Typescript 解决量角器中browser.findElements承诺的问题

Typescript 解决量角器中browser.findElements承诺的问题,typescript,selenium-webdriver,jasmine,protractor,Typescript,Selenium Webdriver,Jasmine,Protractor,我正在尝试用量角器(使用jasmine和typescript)编写一个测试,尝试单击表中列出的每个链接。在单击每个链接之前,我希望测试显示它正在单击的链接的文本,这就是问题所在。当我试图对包含所有元素的对象调用.gettext()时,输出是关于ManagedPromises的。为了解决这个问题,我研究了其他问题,但最终我的解决方案与我所看到的类似。下面是我的代码: browser.findElements(By.xpath('//tBody//a')).then((clickLinks) =&g

我正在尝试用量角器(使用jasmine和typescript)编写一个测试,尝试单击表中列出的每个链接。在单击每个链接之前,我希望测试显示它正在单击的链接的文本,这就是问题所在。当我试图对包含所有元素的对象调用.gettext()时,输出是关于ManagedPromises的。为了解决这个问题,我研究了其他问题,但最终我的解决方案与我所看到的类似。下面是我的代码:

browser.findElements(By.xpath('//tBody//a')).then((clickLinks) => {
                console.log('made it [' + i + ']');
                console.log('link clicked[' + i + ']: ' + clickLinks[i].getText());
                clickLinks[i].click();
                i++;

                browser.waitForAngular();
                browser.driver.navigate().back();
                browser.waitForAngular();
            });

输出是关于
ManagedPromises
,因为方法
Elementfinder.getText()
返回的是
Promise
对象,而不是预期的
字符串
getText()
实际上是一个
async
函数,这些函数总是返回一个
Promise
Promise
可以被视为值的包装。这是一个管理代码的好概念。请慢慢来了解
Promise
对象

另一个问题是 如果要从元素输出文本,则必须调用
getText()。然后(Func)
,如下所示:

browser.findElements(by.xpath('//tBody//a')).then((clickLinks) => {
  clickLinks[i].getText().then(function(text) {
    console.log('got text from link:', text);
  });
});
browser.waitForAngular().then(function() {
  console.log('waitForAngular() done');
  browser.driver.navigate().back().then(function() {
    console.log('navigated');
  });
});
async function waitForPage() {
  await browser.waitForAngular();
  await browser.driver.navigate().back();
}
例如
browser.waitForAngular()
也是一个异步函数。因此,您的代码无法按预期工作

如果你写:

browser.waitForAngular();
browser.driver.navigate().back()

这两个函数将直接执行。上述代码应正确编写如下:

browser.findElements(by.xpath('//tBody//a')).then((clickLinks) => {
  clickLinks[i].getText().then(function(text) {
    console.log('got text from link:', text);
  });
});
browser.waitForAngular().then(function() {
  console.log('waitForAngular() done');
  browser.driver.navigate().back().then(function() {
    console.log('navigated');
  });
});
async function waitForPage() {
  await browser.waitForAngular();
  await browser.driver.navigate().back();
}
这看起来有点混乱,所以他们在
javascript
中添加了关键字
wait
,该关键字在每个
async
函数中都可用。上述代码与
await
组合如下:

browser.findElements(by.xpath('//tBody//a')).then((clickLinks) => {
  clickLinks[i].getText().then(function(text) {
    console.log('got text from link:', text);
  });
});
browser.waitForAngular().then(function() {
  console.log('waitForAngular() done');
  browser.driver.navigate().back().then(function() {
    console.log('navigated');
  });
});
async function waitForPage() {
  await browser.waitForAngular();
  await browser.driver.navigate().back();
}

希望我能帮忙。干杯

你能把输出的信息贴出来吗。