You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.4 KiB
58 lines
1.4 KiB
<?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); |
|
} |
|
}
|
|
|