TestCafe-单击链接后等待页面加载

Cor*_*sen 6 javascript e2e-testing testcafe

我正在使用testcafe进行e2e测试我当前的电子商务项目。在产品列表页面上,我使用选择器来选择产品图块并单击。之后,该页面将加载产品详细信息页面,我可以继续进行测试。

问题是尽管页面尚未加载时,它已经继续使用产品详细信息页面的断言。我假设click动作将等待元素出现并等待页面加载,然后再继续进行断言。

测试:

import HomePage from '../pages/HomePage/HomePage';
import ProductListerPage from '../pages/ProductListerPage/ProductListerPage';
import Browser from '../helpers/Browser';

fixture('test case').page('http://www.homepage.com');

test('test 1', async t => {
  const homePage = new HomePage();
  await homePage.header.search(t, 'foo bar');

  await t.expect(Browser.getCurrentLocation()).eql('http://www.product-lister/search?q=3301');
  const productListerPage = new ProductListerPage();
  await productListerPage.goToFirstProduct(); // <<< in here I click on the first product

  await t.expect(Browser.getCurrentLocation()).eql('http://www.product-detail/'); // << already executed on lister page instead of product page
});
Run Code Online (Sandbox Code Playgroud)

ProductListerPage:

import AbstractPage from '../AbstractPage';
import {t, Selector} from "testcafe";

class ProductListerPage extends AbstractPage {

  constructor() {
    super();

    this._productTilesContainer = Selector('.productLister-productTeasersInner');
    this._productTiles = this._productTilesContainer.child('a.productListerTeaser');
  }

  async goToFirstProduct() {
    return await t.click(this._productTiles.nth(0));
  }
}

export default ProductListerPage;
Run Code Online (Sandbox Code Playgroud)

还有另一种等待页面加载的方法,而不是仅使用睡眠吗?或最佳解决方案是什么?

问候,Cornel

Bar*_*etV 6

您可以指定一个超时值,以便期望值会等待一段时间,直到您的页面位于该url上。取决于您需要多少时间,可以将超时更改为更低或更高,否则它将使用默认超时,我不记得默认值是多少?

有关选择器选项的更多信息

await t.expect(Browser.getCurrentLocation()).eql('http://www.product-detail/', {timeout: 5000});

  • 某些页面在单击后未更改url,这通常是用Java脚本编写的一页应用程序。在这种情况下,这种方法将行不通。 (2认同)