Щелчок по элементу внутри iframe (автоматизация с использованием Selenium) - PullRequest
0 голосов
/ 01 октября 2018

Как мне щелкнуть веб-элемент в этом iframe?У меня нет имени, идентификатора, и я получаю null pointer exception при возврате числа фреймов.Я пытаюсь щелкнуть ссылку «Настроить шаблоны индексов»

Я попытался использовать имя класса iframe-continer, и это сработало, но возвращаемая страница была пустой.Я не уверен, что происходит не так

<!DOCTYPE html>
<html lang="en">
<head>
<body>
<app-root _nghost-c0="" ng-version="5.2.11">
<router-outlet _ngcontent-c0=""></router-outlet>
<admin-console class="ng-star-inserted" _nghost-c1="">
<div class="dashboard-shell-container" _ngcontent-c1="">
<mat-menu class="" _ngcontent-c1=""></mat-menu>
<mat-tab-group class="mat-tab-group mat-primary" _ngcontent-c1="" style="padding-top: 63px;">
<mat-tab-header class="mat-tab-header mat-tab-header-pagination-controls-enabled">
<div class="mat-tab-body-wrapper">
<mat-tab-body id="mat-tab-content-0-0" class="mat-tab-body ng-tns-c9-14 ng-star-inserted" role="tabpanel" aria-labelledby="mat-tab-label-0-0">
<mat-tab-body id="mat-tab-content-0-1" class="mat-tab-body ng-tns-c9-15 ng-star-inserted" role="tabpanel" aria-labelledby="mat-tab-label-0-1">
<mat-tab-body id="mat-tab-content-0-2" class="mat-tab-body ng-tns-c9-16 ng-star-inserted" role="tabpanel" aria-labelledby="mat-tab-label-0-2">
<mat-tab-body id="mat-tab-content-0-3" class="mat-tab-body ng-tns-c9-17 ng-star-inserted" role="tabpanel" aria-labelledby="mat-tab-label-0-3">
<mat-tab-body id="mat-tab-content-0-4" class="mat-tab-body ng-tns-c9-18 ng-star-inserted" role="tabpanel" aria-labelledby="mat-tab-label-0-4">
<mat-tab-body id="mat-tab-content-0-5" class="mat-tab-body ng-tns-c9-19 ng-star-inserted" role="tabpanel" aria-labelledby="mat-tab-label-0-5">
<mat-tab-body id="mat-tab-content-0-6" class="mat-tab-body ng-tns-c9-20 ng-star-inserted" role="tabpanel" aria-labelledby="mat-tab-label-0-6">
<mat-tab-body id="mat-tab-content-0-7" class="mat-tab-body ng-tns-c9-21 ng-star-inserted mat-tab-body-active" role="tabpanel" aria-labelledby="mat-tab-label-0-7">
<div class="mat-tab-body-content ng-trigger ng-trigger-translateTab" style="transform: none;">
<app-aca-component-loader class="ng-star-inserted" _ngcontent-c1="" _nghost-c7="" style="">
<div class="app-kibana ng-star-inserted" _nghost-c26="">
<br _ngcontent-c26="">
<button class="calendar-icon mat-fab mat-accent" _ngcontent-c26="" mat-fab="">
<br _ngcontent-c26="">
<br _ngcontent-c26="">
<div _ngcontent-c26="">
<iframe class="iframe-continer" _ngcontent-c26="" src="/kibana-dashboard/" frameborder="0">
<!DOCTYPE html>
<html lang="en">
<head>
<body id="kibana-body" kbn-chrome="">
<div class="content" chrome-context="" data-test-subj="kibanaChrome">
<nav class="global-nav is-global-nav-open" ng-class="{'is-global-nav-open': isGlobalNavOpen}" ng-show="isVisible" chrome="chrome" data-test-subj="globalNav" is-visible="chrome.getVisible()" logo-brand="chrome.getBrand('logo')" small-logo-brand="chrome.getBrand('smallLogo')" app-title="chrome.getAppTitle()" aria-hidden="false">
<div class="app-wrapper" ng-class="{ 'hidden-chrome': !chrome.getVisible() }">
<div class="app-wrapper-panel">
<div class="toaster-container" list="notifList">
<div class="loadingIndicator ng-hide" ng-show="chrome.httpActive.length" data-test-subj="globalLoadingIndicator" aria-hidden="true">
<div class="application tab-home" ng-class="'tab-' + chrome.getFirstPathSegment() + ' ' + chrome.getApplicationClasses()" ng-view="" ng-controller="chrome.$$rootControllerConstruct as kibana">
<home-app add-base-path="addBasePath" directories="directories">
<div class="euiPage home">
<div class="euiFlexGroup euiFlexGroup--gutterLarge euiFlexGroup--alignItemsFlexEnd euiFlexGroup--justifyContentSpaceBetween euiFlexGroup--responsive">
<div class="euiFlexItem">
<div class="euiFlexItem euiFlexItem--flexGrowZero">
<span class="euiTextColor euiTextColor--subdued">
<div class="euiSpacer euiSpacer--s"></div>
<a class="euiButton euiButton--primary euiButton--small" href="#/management/kibana/index">
<span class="euiButton__content">Set up index patterns</span>
</a>
</div>
</div>
<div class="euiSpacer euiSpacer--l"></div>
<div class="kuiVerticalRhythm">
<div class="euiSpacer euiSpacer--l"></div>
<div class="euiFlexGroup euiFlexGroup--gutterLarge euiFlexGroup--responsive kuiVerticalRhythm">
<div class="euiSpacer euiSpacer--l"></div>
<div class="euiFlexGroup euiFlexGroup--gutterLarge euiFlexGroup--justifyContentCenter euiFlexGroup--responsive">
</div>
</home-app>
</div>
</div>
</div>
</div>
</body>
</html>
</iframe>
</div>
</div>
</app-aca-component-loader>
</div>
</mat-tab-body>
<mat-tab-body id="mat-tab-content-0-8" class="mat-tab-body ng-tns-c9-22 ng-star-inserted" role="tabpanel" aria-labelledby="mat-tab-label-0-8">
<mat-tab-body id="mat-tab-content-0-9" class="mat-tab-body ng-tns-c9-23 ng-star-inserted" role="tabpanel" aria-labelledby="mat-tab-label-0-9">
</div>
</mat-tab-group>
</admin-console>
</app-root>

</body>
</html>

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Прежде чем щелкнуть элемент внутри iframe, сначала необходимо переключиться на iframe:

driver.switchTo().frame(driver.findElement(By.className("iframe-continer"))).

И затем

driver.findElement(By.className("euiButton__content")).click()

Или

driver.findElement(By.cssSelector("a[href='#/management/kibana/index']")).click()
0 голосов
/ 01 октября 2018

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

  • По индексу
  • По имени или идентификатору
  • По веб-элементу

Переключение на фрейм по индексу:

Индекс - это один из атрибутов для Iframe, с помощью которого мы можем переключиться на него.

Индекс iframeначинается с '0'.

Предположим, что если на странице 100 кадров, мы можем переключиться на iframe с помощью индекса.

driver.switchTo().frame(0);
driver.switchTo().frame(1);

Другое решение:

driver.switchTo (). Frame (driver.findElement (By.className ("iframe-continer"))) driver.findElements (By.xpath ("// span [содержит (текст ()), 'Настроить шаблоны индексов')] ")). Click ();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...