登录我的网站量角器后无法找到下一个元素

时间:2016-11-21 10:09:53

标签: protractor gulp-protractor protractor-net

此登录后用户的代码应发布一些问候消息。

describe("launching Telekha",function(){
    it("navigating to signin page",function(){
        browser.get("www");
        element(by.model("credentials.email")).sendKeys("abnsd6@gmail.com");
        element(by.model("credentials.password")).sendKeys("123456");
        var ptr = element( by.css('[ng-click="login()"]') );
        ptr.click();
        });

    it("on dashboard",function(){
        element(by.model("post.postText")).sendKeys("hello");
            element( by.css('[ng-click="postit()"]') ).click();
        });
});

按钮的HTML代码

<textarea id="post-editor" placeholder="Tell your friends" ng-model="post.postText" class="textareanoborder col-xs-12 col-md-12 ng-pristine ng-valid ng-isolate-scope ng-touched" autocomplete="off" aria-invalid="false"> </textarea>

2 个答案:

答案 0 :(得分:1)

这是一个猜测,但从经验来看,它通常并不遥远。当您正在导航到的页面被加载时,是否有任何动画,AJAX请求或其他延迟,与可能发生的AngularJS分开?量角器不会等待这些并执行代码:

element(by.model("post.postText")).sendKeys("hello");

尽快。如果执行此操作时,所有动画尚未完成,则量角器将无法看到您的元素,并且您将看到您遇到的错误。

要快速测试此项,请在其失败的行之前添加browser.sleep(10000);browser.sleep();是一个强制浏览器等待一段时间的命令,在这种情况下是10.000毫秒(10秒)。

如果这最终起作用,您可能希望将其更改为更优雅的内容,例如:

browser.wait(function() {
  return element(by.model("post.postText")).isPresent();
}, 10000);

等待您的元素变为可见,但最多只能持续10秒,之后它将继续显示。

EDIT1 :(工作正常):

HTML(服务于http://localhost:8080

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Example</title>
        <script src="bower_components/angular/angular.min.js"></script>
        <script>
        var app = angular.module('app', []);
        app.controller('myCtrl', function($scope) {
        });
    </script>
</head>
    <body ng-app="app" ng-controller="myCtrl">
         <textarea id="post-editor" placeholder="Tell your friends" ng-model="post.postText" class="textareanoborder col-xs-12 col-md-12 ng-pristine ng-valid ng-isolate-scope ng-touched" autocomplete="off" aria-invalid="false"> </textarea>
    </body>
</html>

spec.js

describe('angularjs homepage todo list', function() {
  it('should add a todo', function() {
    browser.get('http://localhost:8080');
    $("#post-editor").sendKeys("testlol");
    browser.sleep(2000);
  });
});

conf.js

exports.config = {
  seleniumAddress: 'http://localhost:4444/wd/hub',
  specs: ['spec.js']
};

答案 1 :(得分:0)

您可以实现 protractor.ExpectedConditions.visibilityOf()方法,等待元素在UI上可见,然后将数据发送到输入字段。

    var EC=protractor.ExpectedConditions;

    it("on dashboard",function(){
       var ele=element(by.id("post-editor"));
       browser.wait(EC.visibilityOf(ele),8000,'Ele is not presented');
       ele.sendKeys("hello");
       element( by.css('[ng-click="postit()"]') ).click();
    });