Нажмите на значение нг-если из кипариса

У меня есть вкладка параметров, и я хочу щелкнуть эту вкладку.

https://s tackru.com/images/562f5d5376949c53dd2b03f3ede36256472ccbb7.png

Ниже приведен HTML для того же. Пожалуйста, помогите, я не могу нажать на вкладку из-за ngIf: activewizmenu != 'parameters',

<div class="navigation-tab">
    <!-- ngIf: activewizmenu == 'parameters' -->
        <!-- ngIf: activewizmenu != 'parameters' -->
            <div ng-if="activewizmenu != 'parameters'" class="ng-scope">
                <!-- ngIf: hasCreatedTask() -->
                    <div ng-if="hasCreatedTask()" class="ng-scope" style="">
                        <a ui-sref=".parameters" href="#/game/wizard/G_1544166059776_U/edit">
                            <div class="tab">
                                <img src="images/gamification/panel_icons/icone_mw_gametab_0018_Oggetto-vettoriale-avanzato-copia-9.679f1df3.png" alt="parameters">
                                <div class="heading ng-binding">PARAMETERS</div>
                                <span class="color-purple ng-binding">Set parameters</span>
                            </div>
                        </a>
                    </div>
                <!-- end ngIf: hasCreatedTask() -->
            <!-- ngIf: !hasCreatedTask() -->
        </div>
    <!-- end ngIf: activewizmenu != 'parameters' -->
</div>

4 ответа

В AngularJS ngIf полностью удалит элемент и его потомков из DOM, когда выражение ложно, поэтому использование cy.get().click({force: true}) скорее всего будет недостаточно.

В этом DOM, <a ui-sref=".parameters" href="#/game/wizard/G_1544166059776_U/edit"> это кликабельный элемент.

Чтобы выбрать его, вам понадобится селектор, специфичный для этой вкладки, поскольку на этой странице есть и другие вкладки с href и нет никаких отличительных классов или идентификаторов. (AngualrJS добавляет класс ng-scope много элементов).

См. Эту страницу. Атрибут содержит префиксный селектор [name|=”value”] для синтаксиса выбора по атрибуту и ​​его значению.

Я бы попробовал следующее

cy.get("a[href|='#/game/wizard/G_1544166059776_U/edit']")
  .should('be.visible')
  .click()

Это будет ждать 5 секунд до появления кликабельного элемента. Если этого не произойдет, произойдет сбой с сообщением типа тайм-аут, ожидающим, что [href] будет видимым.

Если это не удается (например, если activewizmenu != 'parameters' никогда не становится истинным), тогда вы все равно можете перейти к цели href согласно этому вопросу Cypress get атрибут href,

cy.visit('#/game/wizard/G_1544166059776_U/edit')

Изменяя значение атрибута. Это сработало.

cy.get ('.navigation-tab > .ng-scope > a > .tab')
.invoke('attr','ng-if','activewizmenu = parameters')
cy.contains ('PARAMETERS').should('not.be.visible')
.click({force: true})

Использование .click() с возможностью { force: true },

Это приведет к срабатыванию щелчка и всех последующих событий, даже если элемент не считается "активным".

Пример:

cy.get(##your element identifier##).click({ force: true }) 

это мне очень помогло. Я использовал: cy.get('a').invoke('removeAttr', 'target').click();

https://github.com/cypress-io/cypress-example-recipes/blob/master/examples/testing-dom__tab-handling-links/cypress/integration/tab_handling_anchor_links_spec.js#L54

Другие вопросы по тегам