在使用Laravel黄昏测试PayPal支付时处理cookie横幅



我有一个网页应用程序,其中既有条纹和贝宝集成。我已经通过Laravel黄昏对这两种工具进行了集成测试。PayPal测试在GitHub Actions上大约50%的时间失败,即使有条件逻辑,因为一些绝对疯狂的原因,PayPal决定他们的沙盒需要显示一个cookie横幅,即使这样,也只是经常出现,以至于完全不可预测。

贝宝修复他们的沙盒,可以做些什么来解决这个问题?为什么我用来测试cookie横幅是否存在的if条件只在某些时候有效?

这是我的黄昏测试的简化版本:

public function test_paypal_payments_are_working()
{
$this->browse(function (Browser $browser) {
$browser->visit("/product1")
->waitForLocation('/payment')
->resize(1920, 2000) # Hack to make sure PayPal button is always clickable
->withinFrame('#paypal-button-container iframe', function($browser) {
$browser
->waitFor(".paypal-button")
->click(".paypal-button");
});
$mainWindow = $browser->driver->getWindowHandle();
$paypalWindow = collect($browser->driver->getWindowHandles())->last(); // Get the PayPal popup window
$browser->driver->switchTo()->window($paypalWindow); // Switch to it
$browser
->disableFitOnFailure() # Force screenshots to show screen as interacted with
->click("#btnLogin")
->storeSource("debug"); # Verify the ID of the PayPal cookie banner button
# Check the cookie banner button exists and if so, accept it
if ($browser->element('#acceptAllButton')) {
$browser
->click("#acceptAllButton");
}
$browser
->waitFor("#payment-submit-btn")
->click("#payment-submit-btn");
$browser->driver->switchTo()->window($mainWindow); // Switch back to original window
$browser->waitFor("@payment-success", 15)
->assertSeeIn("@payment-success");
});
}

$browser->element()不是在这种情况下使用的最佳方法。我相信$browser->assertPresent($selector)的方法会解决你的问题

不幸的是,在测试$browser->assertPresent($selector)几次运行后,这也不起作用。虽然我还没有找到一个单一的Laravel黄昏/硒的方法,可以成功地检查PayPal的cookie横幅的存在,并接受它,我想我可能偶然发现了一个解决这个问题的方法,或者至少是一个答案是什么导致它。

无论出于什么原因,PayPal沙箱似乎会触发cookie横幅提示,当它确定你推送"太频繁"时。-根据我的经验,这是在一个小时内大约4次。在看到失败的推送后,等待大约20分钟再推送似乎足以让PayPal停止显示cookie横幅,并允许我的GitHub Action运行如预期的那样通过。

这个问题是Laravel黄昏的失败,没有任何文件,工作方法的条件存在的元素,和PayPal决定提供一个cookie横幅设计用于测试的沙盒,但由于我目前没有时间或精力去追求,这是最接近的解决方案,似乎会有。

我也有同样的问题,并注意到在失败的屏幕截图中,cookie横幅烦人地位于支付按钮的顶部,尽管你应该能够在忽略cookie横幅的情况下进行购买。

在我的管道中,我通过javascript删除元素。当横幅不出现时,它不会给出任何问题,但当它出现时,它会无声地删除它。

就在我运行$browser->click("#payment-submit-btn");之前

$browser->script('document.getElementById("gdprCookieBanner").remove()');

最新更新