5

在下面的代码中,我想检查元素是否存在于 XPath 中,那么只有它应该执行代码。

if($browser->driver->findElement(WebDriverBy::xpath('/html/body/div[1]/div/section/div[3]/div[2]/div/table/tbody/tr['.$i.']/td[2]'))!==null) 
{ 
    $sort=$browser->driver->findElement(WebDriverBy::xpath('/html/body/div[1]/div/section/div[3]/div22]/div/table/tbody/tr['.$i.']/td[2]'))->gettext();
echo $sort; 
}

或者请建议是否有另一种方法来检查 laravel 黄昏中是否存在元素。PS我尝试了whenAvailable方法,但在这种情况下它对我没有帮助。

4

4 回答 4

6

找到了另一个更好且可行的解决方案:

if ($browser->element('#IDString')) {
}
于 2019-10-12T11:28:18.713 回答
2

Laravel-Dusk 提供了两种直接的方法assertVisible(5.4+)和assertPresent(5.6+)。

  • assertVisible确保元素在网页的可见视口中。
  • assertPresent确保该元素存在于页面的源代码中。

您可以传入任何 html 选择器来检查元素是否可见。

/** @test */
public function assert_that_home_page_opens_up(){
    $this->browse(function ($browser) {
        $browser->visit('/')
            ->assertPresent('#my-wrapper')
            ->assertVisible('.my-class-element')
    });
}

路径

仅当您为要查找的元素有选择器(类或 id)时,才能使用上述方法。

如果您需要检查某个元素是否存在于特定的 xPath 中,您可以利用object driveron $browserobject 的实例,直接调用 Facebook Web-driver API 提供的方法:

$this->assertTrue(
    count(
      $browser->driver->findElements(WebDriverBy::xpath('//*[@id="home-wrapper"]'))
     ) > 0);

来源:https ://www.5balloons.info/how-to-check-if-element-is-present-on-page-using-laravel-dusk/

于 2019-01-11T09:43:40.457 回答
1
/*
* check element exist
* if it doesn't not exist
* will throw exception
*
* @retuen void
*/

try {
    $this->browse(function (Browser $browser) {
        $elementExist = $this->assertNotNull($browser->element('#idString'));

        if (empty($elementExist)) {
            \Log::info('element exist') 
        }
    }
} 
catch (\Exception $e) {
    \Log::info($e->getMessage());
}
于 2017-09-20T10:51:14.883 回答
0

当我想检查一个元素是否存在时,我通常会这样做:

$this->browse(function (Browser $browser) {
    $this->assertNotNull($browser->element('#idString'));
}
于 2017-07-05T13:42:26.320 回答