在下面的代码中,我想检查元素是否存在于 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;
}
Run Code Online (Sandbox Code Playgroud)
或者请建议是否有另一种方法来检查laravel黄昏中是否存在元素。PS 我尝试了 whenAvailable 方法,但在这种情况下它无法帮助我。
我有一个文件上传器,我为其编写了以下测试:
$browser->visit('/product/professional-photo-prints')
->attach('photo', __DIR__.'/storage/app/public/testing/test_upload.jpg');
Run Code Online (Sandbox Code Playgroud)
那不上传文件。也没有错误。
但是,当我这样做时:
$browser->visit('/product/professional-photo-prints')
->tinker();
Run Code Online (Sandbox Code Playgroud)
一旦进入 Tinker 启动的终端,当我输入与测试中使用的完全相同的文件上传命令时:
$browser->attach('photo', __DIR__.'/storage/app/public/testing/test_upload.jpg');
Run Code Online (Sandbox Code Playgroud)
...有用。我可以看到我的 Chrome 实例上传文件等。
我一生都无法弄清楚从测试本身运行的命令或从 Tinker 运行的命令之间有什么区别。
任何帮助将不胜感激。谢谢。
PS我正在使用 Laravel 5.5 和 Dusk 2.0
我在选择下拉菜单中的选项时遇到问题。我检查了文档,发现了这个:
这是我的代码:
$browser
->visit('/my-slug')
//version from the doc ==> not working
->select('Choose your type', 'visitor)
//version with the name attribute ==> not working
->select('User[type]', 'visitor')
;
Run Code Online (Sandbox Code Playgroud)
当我选择用户类型时,屏幕上会出现另一个表格,以便我可以写入我的个人信息。
你有什么主意吗?
有没有人在运行 laravel 5.6 dusk 时遇到过这种类型的错误
错误或登录终端:
Facebook\WebDriver\Exception\WebDriverCurlException: Curl error thrown for http POST to /session with params: {"desiredCapabilities":{"browserName":"chrome","platform":"ANY","chromeOptions":{"binary":"","args":["--disable-gpu","--headless"]}}}
Failed to connect to localhost port 9515: Connection refused
Run Code Online (Sandbox Code Playgroud) 我正在使用Laravel 5.4 ,我想知道在Laravel Dusk中运行测试之前是否可以将项目保存在 localStorage中。例如,假设您想要测试在完成存储在浏览器localStorage中的一长串内容后应该发生的一些行为。
在运行需要它们的测试之前是否可以将它们存储在本地存储中?如果是这样,你在考试前会怎么做?
当然,我可以编写一个脚本来手动填充 localStorage 的漫长过程,就像普通用户所做的那样。但是一遍又一遍地运行相同的持久方法只是为了测试一些功能感觉不太对劲。
预先感谢您的帮助。
我写了一个 Laravel Dusk 测试。我试图断言模式打开后某些文本是否可见。所以,我正在使用该whenAvailable方法。但当我可以看到屏幕截图中的文本时,它失败了。
$browser->press('@finish-setup-button')
->whenAvailable('#modal-payment-info', function ($modal) use($paymentInfo) {
$modal->assertSee(html_entity_decode(__('account_setup.payment')))
->type('name', $paymentInfo->name)
->type('iban', $paymentInfo->iban)
->type('bic', $paymentInfo->bic)
->press('@subscribe-button');
});
Run Code Online (Sandbox Code Playgroud)
我收到以下消息:
有1次失败:
1) Tests\Browser\RegistrationTest::testRegistration 在元素 [body #modal- payment-info] 中没有看到预期的文本 [Payment]。未能断言 false 为 true。
截屏:
我究竟做错了什么?
有没有一种简单的方法可以HTTP_REFERER在Dusk测试中进行仿真?我在各个页面上使用Laravel\Dusk\Browser并调用该visit()方法。这是使用Selenium驱动程序。
如下setReferer所示:
namespace Example\Tests\Browser\Processes\PublicSite;
class SampleBrowser extends Browser {
use MakesAssertions, ProvidesAdditionalBrowserActions, WaitsForElements;
public function __construct(RemoteWebDriver $driver, $resolver = null)
{
parent::__construct($driver, new ElementResolver($driver,
$resolver->prefix ?? 'body'));
}
}
class SampleTestCase extends BrowserTestCase
{
/**
* Test that the deal builder modal shows up.
*/
public function testRefererRendering()
{
$this->browse(function (SampleBrowser $browser) {
$browser
// this is the bit that I want
->setReferer('https://example.org/')
->visit('/')
->waitForLocation('/?came_via=example.org')
->assertCookieValue('came_via', 'example.org');
});
}
}
Run Code Online (Sandbox Code Playgroud) date我尝试使用以下代码用 Laravel Dusk填充输入:
$browser->type('cooked_at', (new Carbon())->format('Y-m-d'));
// ...
Run Code Online (Sandbox Code Playgroud)
但我收到这个错误:
元素必须是用户可编辑的才能清除它
其他所有输入字段都正常。只有类型date失败。
如何使用 Laravel Dusk 填写日期输入?
我希望重写 \Laravel\Dusk\Browser 方法并用我自己的方法扩展它,再加上一些增强功能。这是我到目前为止所做的,但它给了我这个错误:
TypeError:传递给 Tests\Browser\SequentialAppTest::Tests\Browser{closure}() 的参数 1 必须是 Tests\MyBrowser 的实例,给定的 Laravel\Dusk\Browser 实例,
在 /var/www/gtest/vendor/ 中调用laravel/dusk/src/Concerns/ProvidesBrowser.php 第 67 行/var/www/gtest/tests/Browser/SequentialAppTest.php:135 /var/www/gtest/vendor/laravel/dusk/src/Concerns/ProvidesBrowser.php:67 /var/www/gtest/tests/Browser/SequentialAppTest .php:157
文件:测试/MyBrowser.php
<?php
namespace Tests;
class MyBrowser extends \Laravel\Dusk\Browser
{
}
Run Code Online (Sandbox Code Playgroud)
文件:tests/Browser/SequentialAppTest.php 命名空间 Tests\Browser;
use Tests\DuskTestCase;
use Tests\MyBrowser as Browser;
...
class SequentialAppTest extends DuskTestCase
{
....
}
Run Code Online (Sandbox Code Playgroud) 我们最近发现我们的项目变得太大,如果没有自动化测试就无法正常运行。
在尝试为该项目编写第一个 Laravel Dusk 测试时,我发现测试失败了,而且没有明确的原因。
首先,我注意到一条关于 SSL 握手失败的奇怪行,但经过一番搜索后,这个错误并没有让我得到任何结果。
一段时间后,我找到了以显示浏览器及其操作的方式运行黄昏的选项。结果我的测试失败了,因为由于 Chrome 的“您的连接不是私人”页面,它正在访问的页面从未显示过。
然后我找到了 2017 年的这篇文章https://laravel-news.com/chrome-63-now-forces-dev-domains-https
根据这篇文章,当您使用 .localhost 或其他未使用的文件时,chrome 不应该显示此页面域扩展,我尝试过扩展 .local .localhost & .test 但没有成功。
有没有办法告诉 chrome 我不想看到这个页面?
laravel-dusk ×10
laravel ×9
php ×4
laravel-5 ×1
laravel-5.5 ×1
selenium ×1
testing ×1
webdriver ×1