当前位置: 首页 > 知识库问答 >
问题:

在Angularjs的量角器测试中选择无线电选项

殳睿
2023-03-14

我正在尝试为Protractor e2e测试选择一个类型为radio的输入对象,我正在对AngularJS测试进行测试。我已尝试通过将输入元素作为目标。name()调用了paymentMethodCardSettlement,就声明而言,它似乎有效。

但是,当我尝试. Click()之类的东西时,它会失败并显示以下消息:

失败:元素当前不可见,因此可能无法与之交互

我在想,这里的解决方案是否可能是将鼠标导航到标签并手动单击?

我所针对的网页如下:

          <label class="control-label" translate=""><span class="ng-scope">Select payment method</span></label>

          <div class="radios">

            <div class="radio" id="paymentMethodBankTransfer">
              <label class="" ng-class="{checked: payment.method == paymentMethodBankTransfer,
                        disabled: !paymentMethodExists(paymentMethodBankTransfer)}">
                <div class="iradio">
                  <input style="position: absolute; opacity: 0;" class="ng-pristine ng-untouched ng-valid" ng-model="payment.method" value="PAY#10" name="paymentMethodBankTransfer" icheck="" ng-disabled="!paymentMethodExists(paymentMethodBankTransfer)" type="radio"><ins style="position: absolute; top: 0%; left: 0%; display: block; width: 100%; height: 100%; margin: 0px; padding: 0px; background: rgb(255, 255, 255) none repeat scroll 0% 0%; border: 0px none; opacity: 0;" class="iCheck-helper"></ins>
                </div>
                <span class="icon-bankTransfer"></span>
                <span translate=""><span class="ng-scope">Bank Transfer</span></span>
              </label>
            </div>

            <div class="radio" id="&quot;paymentMethodCardSettlement">
              <label class="" ng-class="{checked: payment.method == paymentMethodCardSettlement,
                     disabled: !paymentMethodExists(paymentMethodCardSettlement)}">
                <div class="iradio">
                  <input style="position: absolute; opacity: 0;" class="ng-pristine ng-untouched ng-valid" ng-model="payment.method" value="PAY#9" name="paymentMethodCardSettlement" icheck="" ng-disabled="!paymentMethodExists(paymentMethodCardSettlement)" type="radio"><ins style="position: absolute; top: 0%; left: 0%; display: block; width: 100%; height: 100%; margin: 0px; padding: 0px; background: rgb(255, 255, 255) none repeat scroll 0% 0%; border: 0px none; opacity: 0;" class="iCheck-helper"></ins>
                </div>
                <span class="icon-card"></span>
                <span translate=""><span class="ng-scope">Debit/credit card</span></span>
              </label>
            </div>
            <span ng-show="!payment.method &amp;&amp; userForm.paymentMethodCardSettlement.$dirty" class="icon-error form-control-feedback ng-hide" aria-hidden="true"></span>
            <span ng-show="payment.method" class="icon-success form-control-feedback ng-hide" aria-hidden="true"></span>
          </div>
        </div>

我的保护者测试如下:

    describe('Nonkyc Demo App', function() {
  var fullName = element(by.name('fullName'));
  var email = element(by.name('email'));
  var invoiceReference = element(by.name('invoiceReference'));
  var paymentMethod = element(by.model('payment.method'));
  var userAmountInCounterCurrency = element(by.model('user.amountInCounterCurrency'));
  var userCounterCurrency = element(by.model('user.countryCurrency'));
  var paymentMethodCardSettlement = element(by.input('paymentMethodCardSettlement'));
  var amountInCounterCurrency = element(by.name('amountInCounterCurrency'));
  var quoteButton = element(by.id('quoteCalculateBtn'));


  function uiSelect(model, hasText) {
      var selector = element(by.model(model)),
          toggle = selector.element(by.css('.ui-select-toggle'));

      toggle.click();

      browser.driver.wait(function(){
          return selector.all(by.css('.ui-select-choices-row')).count().then(function(count){
              return count > 0;
          });
      }, 2000);

      var choice = selector.element(by.cssContainingText('.ui-select-choices-row',hasText));
      choice.click();
  };

  beforeEach(function() {
    browser.get('http://csc.somehost.com:9000/#/');
  });

  it('should have no title', function() {
    expect(browser.getTitle()).toEqual('');
  });

  it('should create a quote with no errors', function() {
    fullName.sendKeys('Homer Simpson');
    email.sendKeys('a@a.com');
    //select United Kingdom
    uiSelect('user.country','United K');
    invoiceReference.sendKeys(12341234);
    //select Bill Payment
    uiSelect('user.purposeOfPayment','Bill Payment');
    //select GBP
    uiSelect('payment.baseCurrency','G');
    //select bank transfer
    paymentMethodCardSettlement.click();
    amountInCounterCurrency.sendKeys(253);
    uiSelect('user.counterCurrency','GBP');

    quoteButton.click();

  });

});               

共有1个答案

巢烨
2023-03-14

对于单选按钮,您可以单击标签标签。如果单击输入进行无线电输入,那么它会给您错误。但是,如果要验证是否选择了单选按钮,则无法使用标签标记进行验证。这次你必须检查输入。

browser.actions().mouseMove(element(by.radioLabelId))
        .click().perform();

expect(element(by.RadioInput).isSelected()).
        toBe(true);
 类似资料:
  • 我使用量角器在角应用端到端测试。我试图点击选择框中的选项,但我有以下错误元素目前不可见,可能无法操纵。 我有这部分html: 在量角器测试中我有一行代码: 我想点击值为“草稿”的选项。你知道可能是什么问题吗?

  • 我有一个带有输入框和用户界面选择下拉列表的表单,在ng-blur事件中,我调用了一个方法来自动选择所有三个用户界面选择中的选项。当我使用量角器e2e测试执行此操作时,它不会等待用户界面选择发生并提交表单,这会引发异常,因为它没有找到只有在提交包含所有必需字段的表单后才会出现的元素。我试过这样browser.wait 它正在抛出异常。

  • 我正在尝试测试选择选项中的项目文本,但我的测试失败,并给出错误,以下是我的规范: 它('应该测试sorting_options文本', 函数() { 以下是我收到的错误: C: \wamp\www\第一个-角度-应用程序 如何解决这个问题?

  • 我是量角器的新手,在这里我尝试测试量角器的angularjs日期选择器。 我试图找到一种方法来做到这一点,而这篇文章是我唯一找到的东西,使用起来不太清楚 如果有人知道如何测试,请帮忙。 我需要的是选择今天的日期。 提前感谢:) < li >编辑- alecxe,这是我的日期选择器的屏幕截图。很抱歉,无法提供页面的链接。:(

  • 我想计算选择属性中的选项,但我的测试失败了,这是我的规范: 它给了我错误: C:\wamp\www\First-angular-App

  • 问题内容: 我正在使用Selenium Protractor,希望从以下列表中选择所有元素,但其中一个包含文本“ Cat”,然后对其余元素执行一些操作。 是否有cssContainingText(或其他一些选择器)提供的选择器,我可以在其中提供条件以选择除包含文本“ Cat”的元素以外的所有元素? 问题答案: 您可以使用以下定位器策略创建一个 列表, 选择除包含文本 Cat 的元素以外的所有其他元