如何在量angular器上的input上获取文本

在量angular器的文档中,我看到下面的例子:

describe('by model', function() { it('should find an element by text input model', function() { var username = element(by.model('username')); username.clear(); username.sendKeys('Jane Doe'); var name = element(by.binding('username')); expect(name.getText()).toEqual('Jane Doe'); }); 

这里清楚的是,您可以使用“by.model”在input框中设置值,但是如果您想查看input框并查看其中的内容,则需要使用“by.binding”。

我有一套代码在哪里(总结)我做的:

 element(by.model('risk.name')).sendKeys('A value'); expect(element(by.model('risk.name')).getText()).toEqual('A value'); 

(在我的真实代码中,我保存实体,然后在编辑模式下回到它,我检查我的值实际上保存了,但它仍然归结为同样的事情,这个示例代码给出了同样的问题)。

这给了我一个错误:

 Error: Expected '' to equal 'A value'. 

理论上,遵循文档中的例子,我可以做:

 element(by.model('risk.name')).sendKeys('A value'); expect(element(by.binding('risk.name)).getText()).toEqual('A value'); 

但by.binding似乎不喜欢完全合格的模型,我得到一个错误:

 Error: No element found using locator: by.binding("risk.name") 

它确实工作(在时尚之后),如果我这样做:

 element(by.model('risk.name')).sendKeys('A value'); expect(element(by.binding('name')).getText()).toEqual('A value'); 

这find一个元素,但也给出了一个警告,我有多个匹配“名称”的元素。 不幸的是,它所挑选的不是正确的。

所以,有两个问题:

  1. 如果by.model能够返回一个getText(),或者是否有devise决定,它不这样做,我们需要使用by.binding?
  2. 我应该能够在by.binding中使用完全合格的实体,还是有一个devise决定,即by.binding不喜欢完整的模型名称? 如果是这样,我可以使用其他限定符来select不同的绑定?

编辑:

我也尝试了由vdrulerzbuild议的解决scheme,我修改了代码如下:

 element(by.model('risk.name')).getText().then(function(text) { console.log(text); expect(text).toEqual('A risk name'); }); 

console.log正在返回一个空值(不是一个承诺或一个对象),并期望失败给出的消息:

 Expected '' to equal 'A risk name'. 

我的理解是,量angular器已经打好了处理承诺的期望,所以我觉得底层的问题是getText不能在通过模型识别的字段上工作(我可以在标签和其他小部件上成功获取文本)。

我也可以运行下面的代码,使用getAttribute而不是getText():

 expect(element(by.model('risk.name')).getAttribute('autofocus')).toEqual('true'); element(by.model('risk.name')).getAttribute('autofocus').then(function(text) { console.log(text); expect(text).toEqual('true'); }); 

第一部分通过 – 预期的作品。 第二部分也起作用,这表明vdrulerz的语法也是有效的,并且在控制台上logging“真”。 我认为getText有潜在的缺陷?

这在量angular器常见问答中得到了解答: https : //github.com/angular/protractor/blob/master/docs/faq.md#the-result-of-gettext-from-an-input-element-is-always-空

input元素的getText结果总是空的

这是一个webdriver怪癖。 元素总是有空的getText值。 相反,请尝试:

 element.getAttribute('value') 

至于问题2,是的,你应该能够使用by.binding的完全限定名称。 我怀疑你的模板实际上没有通过{{}}或ng-bind绑定到risk.name的元素。

getText()函数不会像webdriver那样工作,为了使它在量angular器中工作,您需要将它包装在一个函数中,并返回文本,就像我们为量angular器框架所做的一样。一个常见的function就像 –

 getText : function(element, callback) { element.getText().then (function(text){ callback(text); }); }, 

通过这个你可以有一个元素的文本。

让我知道如果它仍然不清楚。

谢谢 !!

我有这个问题,我试过Jmr的解决scheme,但它没有为我工作。 由于所有的input字段都具有ng-model属性,我可以拉取属性并对其进行评估并获取值。

HTML

 <input ng-model="qty" type="number"> 

量angular器

 var qty = element( by.model('qty') ); qty.sendKeys('10'); qty.evaluate(qty.getAttribute('ng-model')) //-> 10 

此代码工作。 我有一个dateinput字段已被设置为只读,这迫使用户从日历中select。

开始date:

 var updateInput = "var input = document.getElementById('startDateInput');" + "input.value = '18-Jan-2016';" + "angular.element(input).scope().$apply(function(s) { s.$parent..searchForm[input.name].$setViewValue(input.value);})"; browser.executeScript(updateInput); 

结束date:

 var updateInput = "var input = document.getElementById('endDateInput');" + "input.value = '22-Jan-2016';" + "angular.element(input).scope().$apply(function(s) { s.$parent.searchForm[input.name].$setViewValue(input.value);})"; browser.executeScript(updateInput); 

你可以尝试这样的事情

 var access_token = driver.findElement(webdriver.By.name("AccToken")) var access_token_getTextFunction = function() { access_token.getText().then(function(value) { console.log(value); return value; }); } 

比你可以调用这个function,你想获得的价值..

下面的代码适用于我,从input中获取文本

 return(this.webelement.getAttribute('value').then(function(text) { console.log("--------" + text); })) 

您可以使用jQuery获取文本框中的文本(适合我),检查图像的细节

码:

 $(document.evaluate( "xpath" ,document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue).val() Example: $(document.evaluate( "//*[@id='mail']" ,document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue).val() 

将上面的查询注入到您的代码中。 图像细节:

在这里输入图像说明