Typescript 解决量角器中browser.findElements承诺的问题
我正在尝试用量角器(使用jasmine和typescript)编写一个测试,尝试单击表中列出的每个链接。在单击每个链接之前,我希望测试显示它正在单击的链接的文本,这就是问题所在。当我试图对包含所有元素的对象调用.gettext()时,输出是关于ManagedPromises的。为了解决这个问题,我研究了其他问题,但最终我的解决方案与我所看到的类似。下面是我的代码: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
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();
}
希望我能帮忙。干杯 你能把输出的信息贴出来吗。