Элемент не найден с помощью локатора: By (текст частичной ссылки, Solid Community) - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь выполнить тест на огурец, в котором можно щелкнуть компонент ng-select (раскрывающееся меню), а затем щелкнуть один из параметров меню.

Я пытался использовать "element (by.partialLinkText ('Solid Community')). Click ()", где "Solid Community" - текст, который необходимо щелкнуть. Я также попытался с "by.LinkedText", но это не сработало. Я не могу использовать «by.id» или подобное, потому что параметры меню не имеют идентификатора (у всего выпадающего меню есть один).

Вот некоторые важные части кода:

login.component.html:

...
 <div style="margin-top: 10px;">
    <ng-select class="login-select"
               id="login-select-menu"
               bindLabel="name"
               bindValue="loginUrl"
               placeholder="Select ID Provider"
               dropdownPosition="bottom"
               [items]="identityProviders"
               [(ngModel)]="selectedProviderUrl"
               style="width: 360px; height: 48px; margin-left: auto; margin-right: auto;">

      <!-- DROPDOWN TEMPLATE -->
      <ng-template ng-option-tmp let-item="item">
        <div style="height:40px; padding-top:10px; position: relative;">
          <img [src]="item.image" style="float: left; height: 32px; width: 32px; margin-top:-5px;" />
          <span style="float: left; margin-left: 10px;">{{ item.name }}</span>
          <div style="clear: both;"></div>
        </div>
      </ng-template>

    </ng-select>
    <input type="text"
           class="wide-text"
           *ngIf="selectedProviderUrl===null"
           placeholder="Enter WebID"
           style="margin-top:10px; padding: 12px 10px; width: 340px; height: 16px; display: block; margin-left: auto; margin-right: auto;"
           [(ngModel)]="customProviderUrl" />
    <button class="wide-button" (click)="onLogin()" *ngIf="selectedProviderUrl !== undefined || customProviderUrl !== undefined" [disabled]="selectedProviderUrl===null && !customProviderUrl" style="margin-top:10px;">Go</button>
  </div>
...

loginSelectMenu.feature:

@loginSelectMenu-feature
Feature: Click on login select menu
  Display anything

  @loginSelectMenu-scenario
  Scenario: Login Page
    Given I am on the login page
    When I click on the login select menu
    Then It should happen anything

app.steps.ts (ошибка в «Когда»):

When(/^I click on the login select menu$/, async () => {
    await page.clickOnLoginSelectMenu();
    await page.clickOnSolidCommunity();
});

app.po.ts:

 clickOnLoginSelectMenu() {
        return element(by.id('login-select-menu')).click();
    }

 clickOnSolidCommunity() {
        this.sleep(3000);
        return element(by.partialLinkText('Solid Community')).click();
    }

1 Ответ

1 голос
/ 19 апреля 2019

При идентификации элементов важно смотреть на визуализированный HTML в DOM, а не на угловой шаблон HTML.Существует ряд преобразований, которые происходят при визуализации шаблонов.

Также partialLinkText будет искать <a> теги, которые содержат предоставленную строку.Похоже, вы не используете теги a в своем коде.

Если ваш элемент другого типа, вы можете использовать локатор cssContainingText, например,

element(by.cssContainingText('div','Solid Community')).click();
...