page->login()->open('zabbix.php?action=host.view')->waitUntilReady(); $form = $this->query('name:zbx_filter')->waitUntilPresent()->asForm()->one(); $table = $this->query('class:list-table')->asTable()->one(); // Checking Title, Header and Column names. $this->page->assertTitle('Hosts'); $this->page->assertHeader('Hosts'); $headers = ['Name', 'Interface', 'Availability', 'Tags', 'Status', 'Latest data', 'Problems','Graphs', 'Dashboards', 'Web']; $this->assertSame($headers, ($this->query('class:list-table')->asTable()->one())->getHeadersText()); // Check filter collapse/expand. foreach ([true, false] as $status) { $this->assertTrue($this->query('xpath://ul[@class="ui-sortable-container ui-sortable"]//li[contains(@class, "selected")]') ->one()->isPresent($status) ); $this->query('xpath://a[@aria-label="Home"]')->one()->click(); } // Check fields maximum length. foreach(['tags[0][tag]', 'tags[0][value]'] as $field) { $this->assertEquals(255, $form->query('xpath:.//input[@name="'.$field.'"]') ->one()->getAttribute('maxlength')); } // Check tags maximum length. foreach(['name', 'ip', 'dns', 'port'] as $field) { $this->assertEquals(255, $form->query('xpath:.//input[@id="'.$field.'_0"]') ->one()->getAttribute('maxlength')); } // Check disabled links. foreach (['Graphs', 'Dashboards', 'Web'] as $disabled) { $row = $table->findRow('Name', 'Available host'); $this->assertTrue($row->query('xpath://following::td/span[@class="disabled" and text()="'.$disabled.'"]')->exists()); } // Check tags on the specific host. $tags = $table->findRow('Name', 'Host for tags filtering - clone')->getColumn('Tags')->query('class:tag')->all(); $this->assertEquals(['action: clone', 'tag: host'], $tags->asText()); foreach ($tags as $tag) { $tag->click(); $hint = $this->query('xpath://div[@data-hintboxid]')->asOverlayDialog()->waitUntilPresent()->all()->last(); $this->assertEquals($tag->getText(), $hint->getText()); $hint->close(); } } public static function getCheckFilterData() { return [ [ [ 'filter' => [ 'Name' => 'Empty host' ], 'expected' => [ 'Empty host' ] ] ], [ [ 'filter' => [ 'Host groups' => [ 'Group to copy all graph' ] ], 'expected' => [ 'Host with item to copy all graphs 1', 'Host with item to copy all graphs 2' ] ] ], [ [ 'filter' => [ 'IP' => '127.0.0.3' ], 'expected' => [ 'Template inheritance test host', 'Test item host' ] ] ], [ [ 'filter' => [ 'DNS' => 'zabbixzabbixzabbix.com' ], 'expected' => [ 'Available host', 'Not available host', 'Not available host in maintenance', 'Unknown host', 'Unknown host in maintenance' ] ] ], [ [ 'filter' => [ 'Port' => '161' ], 'expected' => [ 'Test item host', 'Visible host for template linkage' ] ] ], [ [ 'filter' => [ 'Severity' => [ 'Not classified' ] ], 'expected' => [ '1_Host_to_check_Monitoring_Overview', 'Host for tag permissions' ] ] ], [ [ 'filter' => [ 'Severity' => [ 'Warning' ] ], 'expected' => [ '1_Host_to_check_Monitoring_Overview', 'ЗАББИКС Сервер' ] ] ], [ [ 'filter' => [ 'Severity' => [ 'High' ] ], 'expected' => [ '1_Host_to_check_Monitoring_Overview' ] ] ], [ [ 'filter' => [ 'Severity' => [ 'Information' ] ], 'expected' => [ '1_Host_to_check_Monitoring_Overview' ] ] ], [ [ 'filter' => [ 'Severity' => [ 'Average' ] ], 'expected' => [ '1_Host_to_check_Monitoring_Overview', '3_Host_to_check_Monitoring_Overview', '4_Host_to_check_Monitoring_Overview', 'Host for triggers filtering', 'ЗАББИКС Сервер' ] ] ], [ [ 'filter' => [ 'Severity' => 'Disaster' ], 'expected' => [ '1_Host_to_check_Monitoring_Overview' ] ] ], [ [ 'filter' => [ 'Status' => 'Disabled', 'Host groups' => ['Zabbix server'] ], 'expected' => [ 'No data found.' ] ] ], [ [ 'filter' => [ 'Name' => 'available', 'Host groups' => [ 'Group for Host availability widget' ] ], 'expected' => [ 'Available host', 'Not available host' ] ] ], [ [ 'filter' => [ 'Name' => 'for', 'Host groups' => [ 'Zabbix servers' ], 'IP' => '127.0.5.1' ], 'expected' => [ 'Simple form test host' ] ] ], [ [ 'filter' => [ 'Name' => 'Unknown', 'Host groups' => [ 'Group for Host availability widget'], 'IP' => '127.0.0.1', 'DNS' => 'zabbix.com' ], 'expected' => [ 'Unknown host' ] ] ], [ [ 'filter' => [ 'Name' => 'maintenance', 'Host groups' => [ 'Group in maintenance for Host availability widget' ], 'IP' => '127.0.0.1', 'DNS' => 'zab', 'Port' => '10050' ], 'expected' => [ 'Not available host in maintenance', 'Unknown host in maintenance' ] ] ], [ [ 'filter' => [ 'Severity' => [ 'Not classified', 'Warning', 'High', 'Information', 'Average', 'Disaster' ] ], 'expected' => [ '1_Host_to_check_Monitoring_Overview', '3_Host_to_check_Monitoring_Overview', '4_Host_to_check_Monitoring_Overview', 'Host for tag permissions', 'Host for triggers filtering', 'ЗАББИКС Сервер' ] ] ], [ [ 'filter' => [ 'Name' => 'Tommy' ], 'expected' => [] ] ], // With name 'maintenance', exists 3 hosts in maintenance status. Unchecking 'Show hosts in maintenance'. [ [ 'filter' => [ 'Name' => 'maintenance', 'Show hosts in maintenance' => false ], 'expected' => [] ] ], [ [ 'filter' => [ 'Name' => 'maintenance' ], 'expected' => [ 'Available host in maintenance', 'Not available host in maintenance', 'Unknown host in maintenance' ] ] ] ]; } /** * @dataProvider getCheckFilterData */ public function testPageMonitoringHosts_CheckFilter($data) { $this->page->login()->open('zabbix.php?action=host.view&filter_reset=1'); $form = $this->query('name:zbx_filter')->waitUntilPresent()->asForm()->one(); $form->fill($data['filter']); $table = $this->query('class:list-table')->waitUntilPresent()->asTable()->one(); $this->query('button:Apply')->waitUntilClickable()->one()->click(); $table->waitUntilReloaded(); $this->assertTableDataColumn($data['expected']); $this->query('button:Reset')->waitUntilClickable()->one()->click(); $table->waitUntilReloaded(); } public static function getTagsFilterData() { return [ [ [ 'tag_options' => [ 'type' => 'And/Or', 'tags' => [ ['name' => 'test', 'value' => 'test_tag', 'operator' => 'Equals'] ] ], 'result' => [ 'Host for tags filtering' ] ] ], [ [ 'tag_options' => [ 'type' => 'And/Or', 'tags' => [ ['name' => 'test', 'value' => '', 'operator' => 'Contains'] ] ], 'result' => [ 'Host for tags filtering' ] ] ], [ [ 'tag_options' => [ 'type' => 'Or', 'tags' => [ ['name' => 'test', 'value' => 'test_tag', 'operator' => 'Equals'], ['name' => 'action', 'value' => 'clone', 'operator' => 'Contains'] ] ], 'result' => [ 'Host for tags filtering', 'Host for tags filtering - clone' ] ] ], [ [ 'tag_options' => [ 'type' => 'Or', 'tags' => [ ['name' => 'action', 'value' => 'clone', 'operator' => 'Equals'], ['name' => 'tag', 'value' => 'host', 'operator' => 'Equals'] ] ], 'result' => [ 'Host for tags filtering - clone', 'Host for tags filtering - update' ] ] ], [ [ 'tag_options' => [ 'type' => 'And/Or', 'tags' => [ ['name' => 'action', 'value' => 'clone', 'operator' => 'Contains'], ['name' => 'tag', 'value' => 'host', 'operator' => 'Contains'] ] ], 'result' => [ 'Host for tags filtering - clone' ] ] ], [ [ 'tag_options' => [ 'type' => 'Or', 'tags' => [ ['name' => 'action', 'value' => 'clone', 'operator' => 'Equals'], ['name' => 'action', 'value' => 'update', 'operator' => 'Equals'], ['name' => 'tag', 'value' => 'TEMPLATE', 'operator' => 'Equals'] ] ], 'result' => [ 'Host for tags filtering', 'Host for tags filtering - clone', 'Host for tags filtering - update' ] ] ], // Wrote 'template' in lowercase. [ [ 'tag_options' => [ 'type' => 'And/Or', 'tags' => [ ['name' => 'tag', 'value' => 'template', 'operator' => 'Equals'] ] ], 'result' => [] ] ], // Non-existing tag. [ [ 'tag_options' => [ 'type' => 'And/Or', 'tags' => [ ['name' => 'Tommy', 'value' => 'train', 'operator' => 'Contains'] ] ], 'result' => [] ] ], [ [ 'tag_options' => [ 'type' => 'And/Or', 'tags' => [ ['name' => 'test', 'operator' => 'Exists'] ] ], 'result' => [ 'Host for tags filtering' ] ] ], [ [ 'tag_options' => [ 'type' => 'Or', 'tags' => [ ['name' => 'test', 'operator' => 'Exists'] ] ], 'result' => [ 'Host for tags filtering' ] ] ], [ [ 'tag_options' => [ 'type' => 'And/Or', 'tags' => [ ['name' => 'tag', 'operator' => 'Exists'], ['name' => 'test', 'operator' => 'Exists'] ] ], 'result' => [ 'Host for tags filtering' ] ] ], [ [ 'tag_options' => [ 'type' => 'Or', 'tags' => [ ['name' => 'tag', 'operator' => 'Exists'], ['name' => 'test', 'operator' => 'Exists'] ] ], 'result' => [ 'Host for tags filtering', 'Host for tags filtering - clone', 'Host for tags filtering - update' ] ] ], [ [ 'tag_options' => [ 'type' => 'And/Or', 'tags' => [ ['name' => 'test', 'operator' => 'Does not exist'] ] ], 'result' => [ 'Host for tags filtering - clone', 'Host for tags filtering - update', 'Simple form test host', 'SLA reports host', 'Template inheritance test host', 'ЗАББИКС Сервер' ] ] ], [ [ 'tag_options' => [ 'type' => 'Or', 'tags' => [ ['name' => 'test', 'operator' => 'Does not exist'] ] ], 'result' => [ 'Host for tags filtering - clone', 'Host for tags filtering - update', 'Simple form test host', 'SLA reports host', 'Template inheritance test host', 'ЗАББИКС Сервер' ] ] ], [ [ 'tag_options' => [ 'type' => 'Or', 'tags' => [ ['name' => 'action', 'operator' => 'Does not exist'], ['name' => 'tag', 'operator' => 'Does not exist'] ] ], 'result' => [ 'Simple form test host', 'SLA reports host', 'Template inheritance test host', 'ЗАББИКС Сервер' ] ] ], [ [ 'tag_options' => [ 'type' => 'And/Or', 'tags' => [ ['name' => 'action', 'operator' => 'Does not exist'], ['name' => 'tag', 'operator' => 'Does not exist'] ] ], 'result' => [ 'Simple form test host', 'SLA reports host', 'Template inheritance test host', 'ЗАББИКС Сервер' ] ] ], [ [ 'tag_options' => [ 'type' => 'And/Or', 'tags' => [ ['name' => 'test', 'operator' => 'Does not equal', 'value' => 'test_tag'] ] ], 'result' => [ 'Host for tags filtering - clone', 'Host for tags filtering - update', 'Simple form test host', 'SLA reports host', 'Template inheritance test host', 'ЗАББИКС Сервер' ] ] ], [ [ 'tag_options' => [ 'type' => 'Or', 'tags' => [ ['name' => 'test', 'operator' => 'Does not equal', 'value' => 'test_tag'] ] ], 'result' => [ 'Host for tags filtering - clone', 'Host for tags filtering - update', 'Simple form test host', 'SLA reports host', 'Template inheritance test host', 'ЗАББИКС Сервер' ] ] ], [ [ 'tag_options' => [ 'type' => 'And/Or', 'tags' => [ ['name' => 'test', 'operator' => 'Does not equal', 'value' => 'test_tag'], ['name' => 'action', 'operator' => 'Does not equal', 'value' => 'clone'] ] ], 'result' => [ 'Host for tags filtering - update', 'Simple form test host', 'SLA reports host', 'Template inheritance test host', 'ЗАББИКС Сервер' ] ] ], [ [ 'tag_options' => [ 'type' => 'Or', 'tags' => [ ['name' => 'test', 'operator' => 'Does not equal', 'value' => 'test_tag'], ['name' => 'action', 'operator' => 'Does not equal', 'value' => 'clone'] ] ], 'result' => [ 'Host for tags filtering', 'Host for tags filtering - clone', 'Host for tags filtering - update', 'Simple form test host', 'SLA reports host', 'Template inheritance test host', 'ЗАББИКС Сервер' ] ] ], [ [ 'tag_options' => [ 'type' => 'And/Or', 'tags' => [ ['name' => 'tag', 'operator' => 'Does not contain', 'value' => 'host'] ] ], 'result' => [ 'Simple form test host', 'SLA reports host', 'Template inheritance test host', 'ЗАББИКС Сервер' ] ] ], [ [ 'tag_options' => [ 'type' => 'Or', 'tags' => [ ['name' => 'tag', 'operator' => 'Does not contain', 'value' => 'host'] ] ], 'result' => [ 'Simple form test host', 'SLA reports host', 'Template inheritance test host', 'ЗАББИКС Сервер' ] ] ], [ [ 'tag_options' => [ 'type' => 'And/Or', 'tags' => [ ['name' => 'action', 'operator' => 'Does not contain', 'value' => 'clone'], ['name' => 'tag', 'operator' => 'Does not contain', 'value' => 'host'] ] ], 'result' => [ 'Simple form test host', 'SLA reports host', 'Template inheritance test host', 'ЗАББИКС Сервер' ] ] ], [ [ 'tag_options' => [ 'type' => 'Or', 'tags' => [ ['name' => 'action', 'operator' => 'Does not contain', 'value' => 'clone'], ['name' => 'tag', 'operator' => 'Does not contain', 'value' => 'host'] ] ], 'result' => [ 'Host for tags filtering', 'Host for tags filtering - update', 'Simple form test host', 'SLA reports host', 'Template inheritance test host', 'ЗАББИКС Сервер' ] ] ], [ [ 'tag_options' => [ 'type' => 'And/Or', 'tags' => [ ['name' => 'action', 'operator' => 'Does not contain', 'value' => 'clone'], ['name' => 'tag', 'operator' => 'Equals', 'value' => 'host'] ] ], 'result' => [ 'Host for tags filtering - update' ] ] ], [ [ 'tag_options' => [ 'type' => 'And/Or', 'tags' => [ ['name' => 'action', 'operator' => 'Does not contain', 'value' => 'clone'], ['name' => 'tag', 'operator' => 'Exists'] ] ], 'result' => [ 'Host for tags filtering', 'Host for tags filtering - update' ] ] ] ]; } /** * @dataProvider getTagsFilterData */ public function testPageMonitoringHosts_TagsFilter($data) { $this->page->login()->open('zabbix.php?port=10051&action=host.view&groupids%5B%5D=4'); $form = $this->query('name:zbx_filter')->waitUntilPresent()->asForm()->one(); $table = $this->query('class:list-table')->waitUntilPresent()->one(); $form->fill(['id:evaltype_0' => $data['tag_options']['type']]); $this->setTagSelector('id:tags_0'); $this->setTags($data['tag_options']['tags']); $this->query('button:Apply')->one()->waitUntilClickable()->click(); $table->waitUntilReloaded(); $this->assertTableDataColumn(CTestArrayHelper::get($data, 'result', [])); $this->query('button:Reset')->one()->waitUntilClickable()->click(); $table->waitUntilReloaded(); } public function testPageMonitoringHosts_ResetButtonCheck() { $this->page->login()->open('zabbix.php?action=host.view&filter_reset=1'); $form = $this->query('name:zbx_filter')->waitUntilPresent()->asForm()->one(); $this->page->waitUntilReady(); $table = $this->query('class:list-table')->asTable()->one(); // Check table contents before filtering. $start_rows_count = $table->getRows()->count(); $this->assertTableStats($start_rows_count); $start_contents = $this->getTableColumnData('Name'); // Filter hosts. $form->fill(['Name' => 'Empty host']); $this->query('button:Apply')->one()->waitUntilClickable()->click(); $table->waitUntilReloaded(); // Check that filtered count matches expected. $this->assertEquals(1, $table->getRows()->count()); $this->assertTableStats(1); // After pressing reset button, check that previous hosts are displayed again. $this->query('button:Reset')->one()->click(); $table->waitUntilReloaded(); $reset_rows_count = $table->getRows()->count(); $this->assertEquals($start_rows_count, $reset_rows_count); $this->assertTableStats($reset_rows_count); $this->assertEquals($start_contents, $this->getTableColumnData('Name')); } // Checking that Show suppressed problems filter works. public function testPageMonitoringHosts_ShowSuppresed() { $this->page->login()->open('zabbix.php?action=host.view&filter_reset=1'); $form = $this->query('name:zbx_filter')->waitUntilPresent()->asForm()->one(); $this->page->waitUntilReady(); $table = $this->query('class:list-table')->asTable()->one(); $form->fill(['Severity' => ['Not classified', 'Information', 'Warning', 'Average', 'High', 'Disaster']]); $this->query('button:Apply')->one()->waitUntilClickable()->click(); $table->waitUntilReloaded(); foreach ([true, false] as $show) { $form->query('id:show_suppressed_0')->asCheckbox()->one()->fill($show); $this->query('button:Apply')->one()->waitUntilClickable()->click(); $table->waitUntilReloaded(); $this->assertTrue($table->findRow('Name', 'Host for suppression')->isPresent($show)); } $this->query('button:Reset')->one()->click(); } public static function getEnabledLinksData() { return [ [ [ 'name' => 'Dynamic widgets H1', 'link_name' => 'Graphs', 'page_header' => 'Graphs' ] ], [ [ 'name' => 'Host ZBX6663', 'link_name' => 'Web', 'page_header' => 'Web monitoring' ] ], [ [ 'name' => 'ЗАББИКС Сервер', 'link_name' => 'Dashboards', 'page_header' => 'Host dashboards' ] ], [ [ 'name' => 'Empty host', 'link_name' => 'Problems', 'page_header' => 'Problems' ] ], [ [ 'name' => 'Available host', 'link_name' => 'Latest data', 'page_header' => 'Latest data' ] ] ]; } /** * @dataProvider getEnabledLinksData * * Check enabled links and that correct host is displayed. */ public function testPageMonitoringHosts_EnabledLinks($data) { $this->page->login()->open('zabbix.php?action=host.view&filter_reset=1'); $form = $this->query('name:zbx_filter')->waitUntilPresent()->asForm()->one(); switch ($data['name']) { case 'Dynamic widgets H1': case 'Host ZBX6663': case 'Available host': $this->selectLink($data['name'], $data['link_name'], $data['page_header']); $this->page->waitUntilReady(); $filter_form = $this->query('name:zbx_filter')->waitUntilPresent()->asForm()->one(); $filter_form->checkValue(['Hosts' => $data['name']]); $this->query('button:Reset')->one()->click(); break; case 'ЗАББИКС Сервер': $this->selectLink($data['name'], $data['link_name'], $data['page_header']); break; case 'Empty host': $this->page->waitUntilReady(); $this->query('xpath://td/a[text()="'.$data['name'].'"]/following::td/a[text()="'.$data['link_name'].'"]') ->one()->click(); $this->page->waitUntilReady(); $this->page->assertHeader($data['page_header']); $form->checkValue(['Hosts' => $data['name']]); $this->query('button:Reset')->one()->click(); break; } } public static function getHostContextMenuData() { return [ [ [ 'name' => 'ЗАББИКС Сервер', 'disabled' => ['Web'], 'titles' => [ 'Dashboards', 'Problems', 'Latest data', 'Graphs', 'Web', 'Inventory', 'Host', 'Items', 'Triggers', 'Discovery', 'Web', 'Detect operating system', 'Ping', 'Traceroute' ] ] ], [ [ 'name' => 'Available host', 'disabled' => ['Web', 'Graphs', 'Dashboards'], 'titles' => [ 'Dashboards', 'Problems', 'Latest data', 'Graphs', 'Web', 'Inventory', 'Host', 'Items', 'Triggers', 'Discovery', 'Web', 'Detect operating system', 'Ping', 'Traceroute' ] ] ], [ [ 'name' => 'Dynamic widgets H1', 'disabled' => ['Dashboards', 'Web'], 'titles' => [ 'Dashboards', 'Problems', 'Latest data', 'Graphs', 'Web', 'Inventory', 'Host', 'Items', 'Triggers', 'Discovery', 'Web', 'Detect operating system', 'Ping', 'Traceroute' ] ] ], [ [ 'name' => 'Host ZBX6663', 'disabled' => ['Dashboards'], 'titles' => [ 'Dashboards', 'Problems', 'Latest data', 'Graphs', 'Web', 'Inventory', 'Host', 'Items', 'Triggers', 'Discovery', 'Web', 'Detect operating system', 'Ping', 'Traceroute' ] ] ] ]; } /** * @dataProvider getHostContextMenuData * * Click on host name from the table and check displayed popup context. */ public function testPageMonitoringHosts_HostContextMenu($data) { $this->page->login()->open('zabbix.php?action=host.view&filter_reset=1')->waitUntilReady(); $row = $this->query('class:list-table')->asTable()->one()->findRow('Name', $data['name']); $row->query('link', $data['name'])->one()->click(); $this->page->waitUntilReady(); $popup = CPopupMenuElement::find()->waitUntilVisible()->one(); $this->assertEquals(['VIEW', 'CONFIGURATION', 'SCRIPTS'], $popup->getTitles()->asText()); $this->assertTrue($popup->hasItems($data['titles'])); foreach ($data['disabled'] as $disabled) { $this->assertTrue($popup->query('xpath://a[@aria-label="View, '. $disabled.'" and @class="menu-popup-item disabled"]')->one()->isPresent() ); } } /** * Check number of problems displayed on Hosts and Problems page. */ public function testPageMonitoringHosts_CountProblems() { $this->page->login(); $hosts_names = ['1_Host_to_check_Monitoring_Overview', 'ЗАББИКС Сервер', 'Host for tag permissions', 'Empty host']; foreach ($hosts_names as $host) { $this->page->open('zabbix.php?action=host.view&name='.$host)->waitUntilReady(); $table = $this->query('class:list-table')->asTable()->one(); // Get number of problems displayed on icon and it severity level. if ($host !== 'Empty host') { $icons = $table->query('xpath:.//*[contains(@class, "problem-icon-list-item")]')->all(); $results = []; foreach ($icons as $icon) { $amount = $icon->getText(); $severity = $icon->getAttribute('title'); $results[$severity] = $amount; } } else { $this->assertEquals('Problems', $table->getRow(0)->getColumn('Problems')->getText()); } // Navigate to Problems page from Hosts. $table->getRow(0)->getColumn('Problems')->query('xpath:.//a')->one()->click(); $this->page->waitUntilReady(); $this->page->assertTitle('Problems'); $this->query('name:zbx_filter')->waitUntilPresent()->asForm()->one()->checkValue(['Hosts' => $host]); // Count problems of each severity and compare it with problems count from Hosts page. if ($host !== 'Empty host') { foreach ($results as $severity => $count) { $problem_count = $table->query('xpath:.//td[contains(@class, "-bg") and text()="'.$severity.'"]') ->all()->count(); $this->assertEquals(strval($problem_count), $count); } } // Check that table is empty and No data found displayed. else { $this->assertTableData(); } } } public function prepareUpdateData() { $response = CDataHelper::call('host.update', ['hostid' => '99013', 'status' => 1]); $this->assertArrayHasKey('hostids', $response); self::$hostid = $response['hostids'][0]; } /** * @backup hosts * * @onBeforeOnce prepareUpdateData */ public function testPageMonitoringHosts_TableSorting() { // Sort by name and status. $this->page->login()->open('zabbix.php?action=host.view&filter_reset=1')->waitUntilReady(); foreach (['Name', 'Status'] as $listing) { $query = $this->query('xpath://a[@href and text()="'.$listing.'"]'); $query->one()->click(); $this->page->waitUntilReady(); $after_listing = $this->getTableColumnData($listing); $query->one()->click(); $this->page->waitUntilReady(); $this->assertEquals(array_reverse($after_listing), $this->getTableColumnData($listing)); } } /** * Clicking on link from the table and then checking page header * * @param string $host_name Host name * @param string $column Column name * @param string $page_header Page header name */ private function selectLink($host_name, $column, $page_header) { $this->page->waitUntilReady(); $this->query('class:list-table')->asTable()->one()->findRow('Name', $host_name)->query('link', $column)->one()->click(); $this->page->waitUntilReady(); if ($page_header !== null) { $this->page->assertHeader($page_header); } if ($host_name === 'Dynamic widgets H1' && $this->query('xpath://li[@aria-labelledby="ui-id-2"'. ' and @aria-selected="false"]')->exists()) { $this->query('id:ui-id-2')->one()->click(); } if ($host_name === 'ЗАББИКС Сервер' && $column === 'Dashboards') { $this->assertEquals('ЗАББИКС Сервер', $this->query('xpath://ul[@class="breadcrumbs"]/li[2]')->one()->getText()); } } public static function getCheckCountersData() { return [ [ [ 'host' => 'Host ZBX6663', 'counters' => [ [ 'column' => 'Latest data', 'counter' => 14 ], [ 'column' => 'Problems', 'counter' => null ], [ 'column' => 'Graphs', 'counter' => 2 ], [ 'column' => 'Web', 'counter' => 2 ] ] ] ], [ [ 'host' => 'ЗАББИКС Сервер', 'counters' => [ [ 'column' => 'Dashboards', 'counter' => 4 ], [ 'column' => 'Problems', 'counter' => "15" ] ] ] ] ]; } /** * @dataProvider getCheckCountersData */ public function testPageMonitoringHosts_CheckCounters($data) { $this->page->login()->open('zabbix.php?action=host.view')->waitUntilReady(); $row = $this->query('class:list-table')->asTable()->one()->findRow('Name', $data['host']); foreach ($data['counters'] as $counter) { if ($counter['column'] === 'Problems') { $text = ($counter['counter'] === null) ? $counter['column'] : $counter['counter']; $this->assertEquals($text, $row->getColumn($counter['column'])->getText()); } else { $this->assertEquals($counter['column'].' '.$counter['counter'], $row->getColumn($counter['column'])->getText() ); } } } }