selenium_量角器教程:使用Selenium处理超时

selenium

selenium

很多时候,在执行Selenium测试自动化时,由于网页或Web元素需要花费一些时间才能完全加载而导致测试失败,您会遇到某些情况。 在这种情况下,最好的方法是等待页面或Web元素完全加载,以避免由于超时而导致任何错误。 如果您知道如何使用Selenium处理量角器中的超时,则可以轻松解决这些错误,因为它们有助于设置执行下一个操作之前的时间间隔。

为了使其更简单,假设您访问了亚马逊的网站,找到一个特殊的交易按钮,然后单击它,它会弹出一个带有报价的弹出窗口,进一步将您带到交易页面。 这些不同的元素(如按钮和弹出窗口)需要花费一些时间才能加载并变得互动。 但是,当我们在没有任何指令等待的情况下运行测试脚本时,最终会引发错误。 为了解决这个问题,我们需要使用Selenium处理量角器中的超时,以便为特定元素加载留出足够的时间。

因此,为了帮助您解决此问题,在本量角器教程中,我将向您展示如何处理超时。 如果您不熟悉量角器,则可以访问此量角器教程,该教程针对第一个用于量角器测试的测试脚本进行运行

等待页面加载时超时

在执行Selenium测试自动化以浏览浏览器上的页面时,您将指示Selenium WebDriver使用browser.get()命令加载网页。 在后台,量角器框架等待页面完全加载。

因此,让我们以一个测试用例来处理Selenium Protractor中的超时,在该示例中,我们将超时设置为5000毫秒或5秒,浏览器将等待页面加载直到5秒钟,如果页面需要更多时间加载,则会返回错误。

为此,您必须将getPageTimeout(超时(以毫秒为单位))添加到量角器配置文件中,以全局反映超时的变化。 但是,如果要为各个测试用例提供超时,则在调用browser.get()时必须传递一个附加参数,即browser.get(地址,以毫秒为单位的超时)。

test_config.js

specs: ['test_timeout.js'],
// overriding default value of getPageTimeout parameter //
      getPageTimeout: 10000,
      jasmineNodeOpts: {
// overriding default value of defaultTimeoutInterval parameter //
      defaultTimeoutInterval: 10000
   },
   onPrepare: function () {
      browser.manage().window().maximize();
      browser.manage().timeouts().implicitlyWait(3000);
   }
};

// launches the URL in the browser //
browser.get("http://the-internet.herokuapp.com");

或者,将值指定为参数以使用Selenium处理量角器中的超时:

// launches the URL in the browser and specifying the timeout as a parameter //
browser.get(http://the-internet.herokuapp.com,10000);

加载页面后活动期间的超时

在执行用于Protractor测试的Selenium测试自动化的同时,在页面上执行任何浏览器操作时, javascript框架将等待进行任何操作,直到应用程序中没有剩余的异步任务为止。 它表示所有超时以及HTTP请求均已完成。

因此,让我们用一个用例来处理带有Selenium的Protractor中的超时,在该超时中,我们将默认超时设置为6000毫秒或6秒,浏览器将在页面加载后等待,直到进行6秒钟的任何活动,然后错误地指出已计时等待6000毫秒后完成异步任务。

为此,您必须将allScriptsTimeout(超时(以毫秒为单位))添加到Protractor配置文件中,这将全局反映超时的变化。

test_config.js

specs: ['test_timeout.js'],
 
// overriding default value of getPageTimeout parameter //
      getPageTimeout: 10000,
// overriding default value of allScriptsTimeout parameter for Protractor testing//      
allScriptsTimeout: 10000,
 
      jasmineNodeOpts: {
// overriding default value of defaultTimeoutInterval parameter //
      defaultTimeoutInterval: 10000
   },
   onPrepare: function () {
      browser.manage().window().maximize();
      browser.manage().timeouts().implicitlyWait(3000);
   }

您还可以通过更改Web应用程序中的量角器测试来解决此问题。 如果AngularJS应用程序连续检查$ timeout或$ http,则量角器将无限期等待,然后超时。 您可以将$ interval用于Angular 1.2中引入的任何连续轮询。 对于Angular应用,量角器必须等到Angular Zone稳定下来。

这意味着长时间运行的异步操作将阻止您的测试继续进行。 因此,您需要在Angular区域之外执行此类任务,才能在本Protractor教程中找到解决此问题的方法。 例如:

this.ngZone.runOutsideAngular(() => {
  setTimeout(() => {
    // Any changes that are made inside this w
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值