javascript - 输入电子邮件地址后,我需要司机按标签两次

标签 javascript angularjs selenium selenium-webdriver protractor

我有一个将用户添加到网站的模式。首先需要添加一个电子邮件地址,然后检查服务器以查看电子邮件是否已在用户列表中。接下来需要添加名字、姓氏等。问题是,直到我单击输入框外部或按两次选项卡后,才会根据服务器检查电子邮件。在完成此检查之前,名字、姓氏等都是只读的,并且元素不可见,因此我无法进一步填写表格。

这是我尝试过的代码:

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();

上面注释掉的行是不同方式的尝试。我也尝试过这个:

最后一个问题是,电子邮件地址是您在上面看到的元素,名字、姓氏等都在一个数组中。要访问第一个名称栏,可以将 input[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&#39;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>

最佳答案

“TAB”方法对您不起作用的原因是您可能会遇到 Chrome version 44 has some issue with selenium test问题。在这种情况下,您需要尝试使用最新的 Chrome 或 Firefox。

And one last question the email address is the element you see above, first name, last name, etc are in an array. to access first name bar would it be input[type$='text']:nth-of-type(2) as its second on the list?

定义一次输入列表并使用 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();

关于javascript - 输入电子邮件地址后,我需要司机按标签两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31880005/

相关文章:

node.js - 使用 selenium webdriver 和 Node js 进行测试自动化的 chromedriver 中的拖放功能不起作用

Javascript函数定义

javascript - 为javascript创建按钮

javascript - 使用 JavaScript 通过自定义属性获取元素

node.js - Express 4、NodeJS、AngularJS 路由

php - Selenium RC 通过 (winxp/winserver) 发送空白屏幕截图

javascript - 通过对象方法中的外部方法设置变量

javascript - 如何使用 angularJS 将数据从主窗口传递到 Chrome 应用程序中新创建的窗口?

javascript - AngularJS POST 失败 : Response for preflight has invalid HTTP status code 404

c# - Selenium FindsBy 属性抛出编译器错误