Selenium не может проверить, включен или выключен статус переключателя (он всегда показывает себя) - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть кликабельный переключатель, чтобы включить или выключить его. Я использую Java Selenium для проверки состояния (вкл / выкл), затем щелкните по нему, а затем проверьте еще раз статус.

Основываясь на обсуждении в здесь и здесь , я проверяю статус с помощью isSelected(), но, похоже, он не работает должным образом.

Это часть HTML кодов.

<div formly-field="" ng-repeat="field in fields " ng-show="!field.hide" class="formly-field ng-scope ng-isolate-scope txtToggle topToggle formly-field-toggleSwitch" options="field" model="field.model || model" original-model="model" fields="fields" form="theFormlyForm"
  form-id="formly_35" form-state="options.formState" form-options="options" index="$index">
  <div class="form-group ng-scope" ng-class="{'has-error': showError}">
    <div class="col-xs-12 clearfix toggleRow">
      <div class="toggleWrapper switch-on" data-ng-class="{'switch-off': !model[options.key], 'switch-on': model[options.key]}">
        <div role="radio" class="toggle-switch ng-isolate-scope ng-valid" ng-class="{ 'disabled': disabled }" ng-model="model[options.key]" id="formly_2_toggleSwitch_AllowContactSMS_0" name="formly_2_toggleSwitch_AllowContactSMS_0" formly-custom-validation=""
          ng-click="options.templateOptions['onClick'](model[options.key], options, this, $event)" aria-describedby="formly_2_toggleSwitch_AllowContactSMS_0_description">
          <div class="toggle-switch-animate switch-on" ng-class="{'switch-off': !model, 'switch-on': model}"><span class="switch-left ng-binding" ng-bind="onLabel">On</span><span class="knob ng-binding" ng-bind="knobLabel"> </span><span class="switch-right ng-binding" ng-bind="offLabel">Off</span></div>
        </div>
      </div>
      <div class="switchLabel group" ng-class="to.subLabel ? 'group' : 'single'">
        <span class="switchTitle ng-binding">Toggle</span>
        <!-- ngIf: to.subLabel --><span ng-if="to.subLabel" class="switchSubTitle ng-binding ng-scope">alerts</span>
        <!-- end ngIf: to.subLabel -->
      </div>
    </div>
    <!-- ngIf: to.description -->
  </div>
</div>

Вот как Selenium проверяет это

WebElement toggle = driver.findElement(By.xpath("//*[@name='formly_35']/child::div[1]//*[contains(@class,'toggle-switch-animate')]"));

boolean onOff = toggle.isSelected();

if (onOff.isSelected()) {
  log.debug("IS ON");
} else {
  log.debug("IS OFF");
}


toggle.click();


if (onOff.isSelected()) {
  log.debug("IS ON");
} else {
  log.debug("IS OFF");
}

Я вижу в браузере, что нажат тумблер, и меняю статус с вкл на выкл или с выкл на вкл, но Selenium всегда говорит IS OFF.

Можно ли в этом случае использовать isSelected для проверки, включен или выключен тумблер? Если нет, что может быть обходным решением? Спасибо.

1 Ответ

1 голос
/ 05 февраля 2020

Я бы изменил его, чтобы посмотреть, содержит ли класс включение.

WebElement toggle = driver.findElement(By.xpath("//*[@name='formly_35']/child::div[1]//*[contains(@class,'toggle-switch-animate')]"));

boolean onOff = toggle.getAttribute("class").contains("switch-on");

if (onOff) {
  log.debug("IS ON");
} else {
  log.debug("IS OFF");
}


toggle.click();


if (onOff) {
  log.debug("IS ON");
} else {
  log.debug("IS OFF");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...