问题描述
我有一个将用户添加到网站的模式。 首先需要添加一个电子邮件地址,然后检查服务器以查看电子邮件是否已在用户列表中。 接下来,需要添加名字,姓氏等。 问题是,直到我在输入框外单击或两次单击选项卡,才对服务器检查电子邮件。 在完成此检查之前,名字,姓氏等都是只读的,并且元素不可见,因此我无法再填写表格。
这是我尝试过的代码:
element.all(by.css("input[type$='text']")).first().sendKeys(protractor.Key.TAB); browser.driver.sleep(3000); //below is the first name element element(by.xpath("(//input[@type='text'])[2]")).sendKeys("a First Name");
element.all(by.css("input[type$='text']")).first().sendKeys('anemailaddy@newmarketinc.com', protractor.Key.TAB); //.browser.actions().sendKeys(protractor.Key.TAB).perform();
上面注释掉的行是尝试以不同的方式进行。 我也试过这个:
最后一个问题是电子邮件地址是您在上方看到的元素,名字,姓氏等位于数组中。 访问名字栏,它会被输入[type $ ='text']:nth-??of-type(2)作为列表中的第二个吗?
页面HTML:
<div class="dialog-overlay" ng-class="{visible: usersCtrl.editPermissionsVisible}"> <div class="edit-user-dialog"> <div class="dialog-header"> <div class="dg-title-text">Edit a User's Permissions</div> <span class="icon icon-close" ng-click="usersCtrl.hideEditPermissions()"></span> </div> <div class="dialog-content"> <div class="dg-row"> <div> <span class="dg-field-label">Email:</span> <span class="dg-field-error " ng-bind="text = usersCtrl.invalidEmailMessage"></span> </div> <input type="text" class="dg-field-input" ng-model="usersCtrl.user.email" ng-blur="usersCtrl.onChangeEmail()" ng-disabled="!usersCtrl.addUserVisible" /> </div> <div class="dg-row"> <div class="dg-cell col-2"> <span class="dg-field-label">First Name:</span> <input type="text" class="dg-field-input" ng-model="usersCtrl.user.firstName" ng-disabled="usersCtrl.editPermissionsVisible || usersCtrl.searchNotStartOrSuccess" /> </div> <div class="dg-cell col-2"> <span class="dg-field-label">Last Name:</span> <input type="text" class="dg-field-input" ng-model="usersCtrl.user.lastName" ng-disabled="usersCtrl.editPermissionsVisible || usersCtrl.searchNotStartOrSuccess" /> </div> </div> <div class="dg-row"> <span class="dg-field-label">Title:</span> <input type="text" class="dg-field-input" ng-model="usersCtrl.user.title" ng-disabled="usersCtrl.editPermissionsVisible || usersCtrl.searchNotStartOrSuccess" /> </div> <div class="dg-row"> <div class="checkbox-control" ng-click="usersCtrl.permissions.toggleContentManagement()"> <span class="checkbox-mark svg-icon" ng-class="{'icon-check-on': usersCtrl.permissions.allowContentManagement}"></span> <span class="checkbox-text bold">Allow Access to iPlan Content Management System</span> </div> </div> <div class="dg-row content-management"> <div class="checkbox-column" ng-repeat="permission in usersCtrl.permissions.contentManagement" ng-if="permission.canIssue"> <div class="checkbox-control" ng-click="!usersCtrl.isDisabledPermission(permission) && usersCtrl.togglePermission(permission)" ng-class="{disabled: usersCtrl.isDisabledPermission(permission)}"> <span class="checkbox-mark svg-icon" ng-class="{'icon-check-on': permission.value}"></span> <span class="checkbox-text">{{permission.displayName}}</span> </div> </div> <div class="clearfix"></div> </div> <div class="dg-row "> <div class="checkbox-control" ng-click="usersCtrl.togglePermission(usersCtrl.permissions.manageUsers)"> <span class="checkbox-mark svg-icon" ng-class="{'icon-check-on': usersCtrl.permissions.manageUsers.value}"></span> <span class="checkbox-text bold">{{usersCtrl.permissions.manageUsers.displayName}}</span> </div> </div>
1楼
无法使用“ TAB”方法的原因是,您可能会遇到问题。 在这种情况下,您需要尝试使用最新的Chrome或Firefox。
最后一个问题是电子邮件地址是您在上方看到的元素,名字,姓氏等位于数组中。 访问名字栏,它会被输入[type $ ='text']:nth-??of-type(2)作为列表中的第二个吗?
一次定义输入列表,并使用first()
, get()
或last()
:
var inputs = element.all(by.css("input[type$='text']"));
var email = inputs.first();
email.sendKeys("anemailaddy@newmarketinc.com", protractor.Key.TAB, protractor.Key.TAB);
inputs.get(1).sendKeys("a First Name");
您也可以尝试在模态之外单击,例如:
browser.actions().mouseMove({x: 5, y: 5}).click().perform();