updated-packages
This commit is contained in:
164
vendor/laravel/dusk/src/Browser.php
vendored
164
vendor/laravel/dusk/src/Browser.php
vendored
@@ -2,12 +2,14 @@
|
||||
|
||||
namespace Laravel\Dusk;
|
||||
|
||||
use Closure;
|
||||
use BadMethodCallException;
|
||||
use Closure;
|
||||
use Facebook\WebDriver\Remote\WebDriverBrowserType;
|
||||
use Facebook\WebDriver\WebDriverBy;
|
||||
use Facebook\WebDriver\WebDriverDimension;
|
||||
use Facebook\WebDriver\WebDriverPoint;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Support\Traits\Macroable;
|
||||
use Facebook\WebDriver\WebDriverDimension;
|
||||
use Facebook\WebDriver\Remote\WebDriverBrowserType;
|
||||
|
||||
class Browser
|
||||
{
|
||||
@@ -17,6 +19,7 @@ class Browser
|
||||
Concerns\InteractsWithJavascript,
|
||||
Concerns\InteractsWithMouse,
|
||||
Concerns\MakesAssertions,
|
||||
Concerns\MakesUrlAssertions,
|
||||
Concerns\WaitsForElements,
|
||||
Macroable {
|
||||
__call as macroCall;
|
||||
@@ -43,6 +46,13 @@ class Browser
|
||||
*/
|
||||
public static $storeConsoleLogAt;
|
||||
|
||||
/**
|
||||
* The directory where source code snapshots will be stored.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public static $storeSourceAt;
|
||||
|
||||
/**
|
||||
* The browsers that support retrieving logs.
|
||||
*
|
||||
@@ -77,7 +87,7 @@ class Browser
|
||||
/**
|
||||
* The element resolver instance.
|
||||
*
|
||||
* @var ElementResolver
|
||||
* @var \Laravel\Dusk\ElementResolver
|
||||
*/
|
||||
public $resolver;
|
||||
|
||||
@@ -95,11 +105,18 @@ class Browser
|
||||
*/
|
||||
public $component;
|
||||
|
||||
/**
|
||||
* Indicates that the browser should be resized to fit the entire "body" before screenshotting failures.
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
public $fitOnFailure = true;
|
||||
|
||||
/**
|
||||
* Create a browser instance.
|
||||
*
|
||||
* @param \Facebook\WebDriver\Remote\RemoteWebDriver $driver
|
||||
* @param ElementResolver $resolver
|
||||
* @param \Laravel\Dusk\ElementResolver $resolver
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($driver, $resolver = null)
|
||||
@@ -164,6 +181,21 @@ class Browser
|
||||
* @return $this
|
||||
*/
|
||||
public function on($page)
|
||||
{
|
||||
$this->onWithoutAssert($page);
|
||||
|
||||
$page->assert($this);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the current page object without executing the assertions.
|
||||
*
|
||||
* @param mixed $page
|
||||
* @return $this
|
||||
*/
|
||||
public function onWithoutAssert($page)
|
||||
{
|
||||
$this->page = $page;
|
||||
|
||||
@@ -174,8 +206,6 @@ class Browser
|
||||
$page::siteElements(), $page->elements()
|
||||
));
|
||||
|
||||
$page->assert($this);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
@@ -231,6 +261,81 @@ class Browser
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Make the browser window as large as the content.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function fitContent()
|
||||
{
|
||||
$this->driver->switchTo()->defaultContent();
|
||||
|
||||
$html = $this->driver->findElement(WebDriverBy::tagName('html'));
|
||||
|
||||
if (! empty($html) && ($html->getSize()->getWidth() <= 0 || $html->getSize()->getHeight() <= 0)) {
|
||||
$this->resize($html->getSize()->getWidth(), $html->getSize()->getHeight());
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable fit on failures.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function disableFitOnFailure()
|
||||
{
|
||||
$this->fitOnFailure = false;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable fit on failures.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function enableFitOnFailure()
|
||||
{
|
||||
$this->fitOnFailure = true;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Move the browser window.
|
||||
*
|
||||
* @param int $x
|
||||
* @param int $y
|
||||
* @return $this
|
||||
*/
|
||||
public function move($x, $y)
|
||||
{
|
||||
$this->driver->manage()->window()->setPosition(
|
||||
new WebDriverPoint($x, $y)
|
||||
);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Scroll screen to element at the given selector.
|
||||
*
|
||||
* @param string $selector
|
||||
* @return $this
|
||||
*/
|
||||
public function scrollTo($selector)
|
||||
{
|
||||
$this->ensurejQueryIsAvailable();
|
||||
|
||||
$selector = addslashes($this->resolver->format($selector));
|
||||
|
||||
$this->driver->executeScript("jQuery(\"html, body\").animate({scrollTop: jQuery(\"$selector\").offset().top}, 0);");
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Take a screenshot and store it with the given name.
|
||||
*
|
||||
@@ -239,9 +344,15 @@ class Browser
|
||||
*/
|
||||
public function screenshot($name)
|
||||
{
|
||||
$this->driver->takeScreenshot(
|
||||
sprintf('%s/%s.png', rtrim(static::$storeScreenshotsAt, '/'), $name)
|
||||
);
|
||||
$filePath = sprintf('%s/%s.png', rtrim(static::$storeScreenshotsAt, '/'), $name);
|
||||
|
||||
$directoryPath = dirname($filePath);
|
||||
|
||||
if (! is_dir($directoryPath)) {
|
||||
mkdir($directoryPath, 0777, true);
|
||||
}
|
||||
|
||||
$this->driver->takeScreenshot($filePath);
|
||||
|
||||
return $this;
|
||||
}
|
||||
@@ -257,10 +368,9 @@ class Browser
|
||||
if (in_array($this->driver->getCapabilities()->getBrowserName(), static::$supportsRemoteLogs)) {
|
||||
$console = $this->driver->manage()->getLog('browser');
|
||||
|
||||
if (!empty($console)) {
|
||||
if (! empty($console)) {
|
||||
file_put_contents(
|
||||
sprintf('%s/%s.log', rtrim(static::$storeConsoleLogAt, '/'), $name)
|
||||
, json_encode($console, JSON_PRETTY_PRINT)
|
||||
sprintf('%s/%s.log', rtrim(static::$storeConsoleLogAt, '/'), $name), json_encode($console, JSON_PRETTY_PRINT)
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -269,9 +379,29 @@ class Browser
|
||||
}
|
||||
|
||||
/**
|
||||
* Switch to a specified frame in the browser.
|
||||
* Store a snapshot of the page's current source code with the given name.
|
||||
*
|
||||
* @param string $name
|
||||
* @return $this
|
||||
*/
|
||||
public function storeSource($name)
|
||||
{
|
||||
$source = $this->driver->getPageSource();
|
||||
|
||||
if (! empty($source)) {
|
||||
file_put_contents(
|
||||
sprintf('%s/%s.txt', rtrim(static::$storeSourceAt, '/'), $name), $source
|
||||
);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Switch to a specified frame in the browser and execute the given callback.
|
||||
*
|
||||
* @param string $selector
|
||||
* @param \Closure $callback
|
||||
* @return $this
|
||||
*/
|
||||
public function withinFrame($selector, Closure $callback)
|
||||
@@ -311,7 +441,7 @@ class Browser
|
||||
);
|
||||
|
||||
if ($this->page) {
|
||||
$browser->on($this->page);
|
||||
$browser->onWithoutAssert($this->page);
|
||||
}
|
||||
|
||||
if ($selector instanceof Component) {
|
||||
@@ -355,7 +485,7 @@ class Browser
|
||||
*/
|
||||
public function ensurejQueryIsAvailable()
|
||||
{
|
||||
if ($this->driver->executeScript("return window.jQuery == null")) {
|
||||
if ($this->driver->executeScript('return window.jQuery == null')) {
|
||||
$this->driver->executeScript(file_get_contents(__DIR__.'/../bin/jquery.js'));
|
||||
}
|
||||
}
|
||||
@@ -439,6 +569,8 @@ class Browser
|
||||
* @param string $method
|
||||
* @param array $parameters
|
||||
* @return mixed
|
||||
*
|
||||
* @throws \BadMethodCallException
|
||||
*/
|
||||
public function __call($method, $parameters)
|
||||
{
|
||||
|
Reference in New Issue
Block a user