public function testCreateTree() { $shop = self::getShop(); $cm = $shop->getCategoryManager(); $cats = ['Selenium Tree Root', 'Selenium Child 1', 'Selenium Child 2']; $tree = [2]; $tree[] = $cm->createCategory(['name' => $cats[0], 'parent' => end($tree)]); $tree[] = $cm->createCategory(['name' => $cats[1], 'parent' => end($tree)]); $tree[] = $cm->createCategory(['name' => $cats[2], 'parent' => end($tree)]); // Add our category to blocktopmenu $browser = $shop->getBackOfficeNavigator()->visitModuleConfigurationPage('blocktopmenu'); $browser->click('#availableItems option[value="CAT' . $tree[1] . '"]')->click('#addItem')->click('#module_form_submit_btn'); $shop->expectStandardSuccessMessage(); $shop->getFrontOfficeNavigator()->visitHome(); $found = []; $spinner = new Spinner(); $spinner->assertBecomesTrue(function () use($browser, $cats, &$found) { $browser->hover('#block_top_menu a[title="' . $cats[0] . '"]'); sleep(1); $links = $browser->find('#block_top_menu ul.submenu-container a', ['unique' => false]); foreach ($links as $n => $link) { $text = strtolower(trim($link->getText())); if ($text !== '') { $found[$text] = true; } } return count($found) > 0; }); foreach ($cats as $n => $cat) { if ($n > 0 && !isset($found[strtolower(trim($cat))])) { throw new \PrestaShop\PSTAF\Exception\FailedTestException("Did not find this cat in the topmenu: {$cat}."); } } }
private function saveProduct() { $browser = $this->getBrowser(); $assert = new Spinner('Save button did not appear in time.', 30); $assert->assertBecomesTrue(function () use($browser) { $browser->clickButtonNamed('submitAddproductAndStay'); return true; }); $browser->ensureStandardSuccessMessageDisplayed(); }
public function testSubdomainsCanBeBound() { $storeDetailsPage = $this->homePage->visit()->gotoMyStores()->gotoDetails(); $domain = md5(microtime()) . $this->getSecrets()['subdomain']; $storeDetailsPage->bindDomain($domain); $detailsPage = $this->homePage->visit()->gotoMyStores()->gotoDetails(); $spinner = new Spinner('Domain `' . $domain . '` wasn\'t bound in 30 minutes.', 1800, 1000); $spinner->assertBecomesTrue(function () use($detailsPage, $domain) { $this->getBrowser()->reload(); return $detailsPage->isDomainActive($domain); }); }
public function waitFor200($url) { $spinner = new Spinner('Did not find final FO URL in 1 hour.', 3600, 1000); $spinner->assertBecomesTrue(function () use($url) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_NOBODY, true); curl_exec($ch); $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); return $status == 200; }); }
public function ensureAnEmailIsSentTo($address, $timeout_in_seconds = 300, array $options = array()) { $spinner = new Spinner("Did not get required email on {$address} after {$timeout_in_seconds}s.", $timeout_in_seconds, 10000); $spinner->assertBecomesTrue(function () use($address, $options) { $emails = $this->readEmails($address); if (isset($options['body']['contains'])) { foreach ($emails as $email) { if (false !== strpos($email['body'], $options['body']['contains'])) { return true; } } return false; } else { return count($emails) > 0; } }); return $this; }
public static function spawnSelenium($headless = false) { $display = null; if ($headless) { for ($displayNumber = 10; $displayNumber < 50; ++$displayNumber) { try { $xprocess = new Process('Xvfb', [':' . $displayNumber], ['-ac' => ''], ['upid' => true]); $xprocess->run(); sleep(1); } catch (Exception $e) { // never mind, try next display... } if ($xprocess->running()) { self::$processesToKill[] = $xprocess; $display = ':' . $displayNumber; break; } } } list($process, $port) = self::buildStartProcess(); self::$processesToKill[] = $process; if ($display) { $process->setEnv('DISPLAY', $display); } $process->run(null, 'selenium.log', 'selenium.log'); if ($process->running()) { self::$host = 'http://127.0.0.1:' . $port . '/wd/hub'; $spinner = new Spinner('Could not automatically start selenium.', 20, 1000); $spinner->assertBecomesTrue(function () { $ch = curl_init(self::$host . '/status'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $status = json_decode(curl_exec($ch), true); curl_close($ch); return isset($status['status']) && $status['status'] === 0; }); } register_shutdown_function(function () { self::unSpawnSelenium(); }); }
/** * @depends testSubdomainsFromDeletedShopRemainAvailableToCustomer */ public function testDomainsFromDeletedShopCanBeReAssigned($domainsPage) { $domainsPage->assignDomainToShop(self::getValue('sd1'), self::getValue('uidB')); $domainsPage->assignDomainToShop(self::getValue('sd3'), self::getValue('uidB')); $spinner = new Spinner('Domains from deleted shop could not be re-assigned to surviving shop.', 1800, 1000); $spinner->assertBecomesTrue(function () use($domainsPage) { $this->getBrowser()->reload(); return $domainsPage->isGreen(self::getValue('sd1')) && $domainsPage->isGreen(self::getValue('sd3')); }); }