Laravel Dusk 如何在元素内部查找元素?

Laravel Dusk how to find elements inside elements?

我正在使用 Laravel 5.8、Dusk。我想在 class 中找到某些元素。

假设我用 selectable 的 class 提取了页面上的每个元素。

$browser->visit('https://www.website.com')
        ->script('window.scrollTo(0, 10000);');

$elems = $browser              
          ->pause(1000)
          ->elements('.selectable');

在此之后,我像这样遍历这些元素:

foreach ($elems as $elem) {

}

问题是,如何在这些.selectable class中找到每个带有.custom-item的class的元素。此外,我想获得 .custom-item 的属性之一。我以前是这样得到它的:

$elem->getAttribute('custom-attribute');

(从中学习到post)

那么如何在元素中 find/extract 元素然后使用 Laravel Dusk 获取它们的自定义属性?

Laravel Dusk 不提供 API 定位元素的方法。您可以利用底层网络驱动程序 API.

您可以通过

访问网络驱动程序
$browser->driver

并在另一个元素中找到一个元素。您可能需要通过 xPath

来处理它
$browser->driver->findElements(WebDriverBy::xpath('//*[@class="selectable"][@class="custom-attribute"]'));

我在上面的例子中编写了xpath。您可以通过检查 chrome 开发人员工具中的元素找到确切的 xpath。

您可以在此处阅读有关 Dusk 中的选择器的更多信息

https://www.5balloons.info/understanding-selectors-laravel-dusk-browser-testing/

更简单的方法:

$advs = $browser->elements('CSS_SELECTOR');

foreach ($advs as $adv) {

   // for example
   $adv->click();

}