量角器在继续之前等待页面加载JS脚本?

时间:2017-03-04 14:21:43

标签: javascript protractor automated-tests

由于额外的JS脚本被加载到页面,我的量角器测试(非角度)失败。我试过了,但是没有运气。添加的额外JS不是XHR请求。我认为它包含在包中,只是等待被调用。

长版: 单击按钮后,用户将被重定向到新页面。 但是,在这个新页面中,正在添加一个JS脚本以及一些图像。这会创建一个新的加载时间。问题是当页面仍然加载这个JS和其他东西时,量角器正在点击。

我尝试使用.then()但没有运气。我假设它只等待服务器响应。

我能够通过添加browser.sleep()来让它运行。我知道这不是一个好习惯,所以我还在研究。

我的.then代码段示例

element(by.css("[type='submit']")).click().then(function(){
//Enter payment info
element(by.css(".number[type='text']")).sendKeys(data.validCard); //Mastercard
element(by.css("select.exp_month")).element(by.css("[value='05']")).click();
element(by.css("select.exp_year")).element(by.css("[value='2021']")).click();
element(by.css("input.cvc[type='text']")).sendKeys("1234");
element(by.css("input.full-name[type='text']")).clear().sendKeys(randomName);
elm = element(by.css("button[type='submit']"));
browser.wait(EC.presenceOf(elm), 60000);
element(by.css("button[type='submit']")).click();

});

1 个答案:

答案 0 :(得分:0)

我觉得你知道这一点,但为了清楚起见,.then用于等待承诺解决,而不是元素。你正确地使用等待,等待页面加载,但目标应该是指示正在加载的页面,也许不是按钮本身...除非它们是相同的东西。

首先,虽然这可能不是答案,但当按钮中的时,presenceOf将会返回,并且可能尚未显示。我发现在这些情况下使用isClickable通常会更好。

最终,你只需要在js完成加载时在dom中找到一个条件,然后等待。