59 lines
1.4 KiB
PHP
Executable File
59 lines
1.4 KiB
PHP
Executable File
<?php
|
|
|
|
namespace Tests;
|
|
|
|
use Laravel\Dusk\Browser as BaseBrowser;
|
|
use Laravel\Dusk\Component;
|
|
use Laravel\Dusk\ElementResolver;
|
|
|
|
class Browser extends BaseBrowser
|
|
{
|
|
/**
|
|
* @var static
|
|
*/
|
|
public $parent;
|
|
|
|
/**
|
|
* 作用与 with 方法完全相同,不同的在于此方法可以让下层 Broser 对象继承当前 Component 的方法.
|
|
*
|
|
* @param string|Component $selector
|
|
* @param \Closure $callback
|
|
* @return $this
|
|
*/
|
|
public function extend($selector, $callback)
|
|
{
|
|
$browser = new static(
|
|
$this->driver, new ElementResolver($this->driver, $this->resolver->format($selector))
|
|
);
|
|
|
|
$browser->parent = $this;
|
|
|
|
if ($this->page) {
|
|
$browser->onWithoutAssert($this->page);
|
|
}
|
|
|
|
if ($selector instanceof Component) {
|
|
$browser->onComponent($selector, $this->resolver);
|
|
}
|
|
|
|
call_user_func($callback, $browser);
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function __call($method, $parameters)
|
|
{
|
|
$parentComponent = $this->parent ? $this->parent->component : null;
|
|
|
|
if ($parentComponent && method_exists($parentComponent, $method)) {
|
|
array_unshift($parameters, $this);
|
|
|
|
$parentComponent->{$method}(...$parameters);
|
|
|
|
return $this;
|
|
}
|
|
|
|
return parent::__call($method, $parameters);
|
|
}
|
|
}
|