我正在尝试使用console.log()方法在控制台上打印值。
我在获得所需的打印值后使用了此方法,但是此方法会打印Searched Accession:___::[object Object]
消息。
browser.driver.findElement(by.xpath('//*[@id="dataTable_filter"]/label/input')).sendKeys('17-01717');
browser.sleep(5000);
var accession= element.all(by.xpath('//*[@id="dataTable"]/tbody/tr[1]/td[1]/a')).getText();
expect(accession).toContain('17-01717');
console.log('*****Searched Accession:___::'+accession);
我做错了吗?
答案 0 :(得分:0)
请转到www.protractortest.org并执行Tutorial,查看Styleguide(尤其是定位策略)和API。
虽然我们喜欢在SO上提供帮助,但是很明显你没有花费任何精力研究Protractor。您的代码示例包含许多错误和不良做法:
browser.driver.findElement()
有点被element()
或$()
by.css
而不是by.xpath
- 它更可靠browser.sleep()
。 browser.wait()
和ExpectedConditions
getText()
执行element.all()
,因为element.all()
会返回一个在数组中解析的Promise 入门奖励,此处您的代码以可能的方式运作
$('#dataTable_filter label input').sendKeys('17-01717');
let accession= $$('#dataTable tbody tr td a').first();
accession.getText().then(function(txt){
console.log('*****Searched Accession:___::'+txt);
});
expect(accession.getText()).toContain('17-01717');
您实际上不需要console,log()
,但如果您要打印从getText()
收到的文字,则需要执行then()
才能解决承诺第一
承诺
显然你不知道Promises
是如何运作的。非常简短:许多JavaScript / Jasmine / Protractor命令返回第一个promise,只有少量命令立即执行。就像你两次运行你的代码一样:
在第一次运行中,Promise
- 命令将回答“我保证稍后再做”,执行命令将回答“做它 - 完成!”。
然后在(假想的)第二次运行中,所有Promise
- 命令将回答“现在就完成 - 完成”,但执行命令将回答“已经做过,我不再做任何事了”
所以你所有的console.log()
都是唯一立即执行的代码行...所有其他行都在第二次运行时执行。