如何在编写量角器测试用例时停止自动关闭浏览器

时间:2016-03-11 06:50:00

标签: protractor

我不熟悉使用量角器编写非角度应用的测试用例。我写了一个示例测试用例。运行测试用例后,浏览器会自动关闭。如何防止这种情况发生。这是我的代码

var submitBtnElm = $('input[data-behavior=saveContribution]');

      it('Should Search', function() {
        browser.driver.get('http://localhost/enrollments/osda1.html');   
        browser.driver.findElement(by.id('contributePercentValue')).sendKeys(50);
        submitBtnElm.click().then(function() {

        });
      });

9 个答案:

答案 0 :(得分:6)

我也遇到了类似的问题,我有一个测试用例流,我们正在与多个应用程序交互,当使用Protractor时,浏览器在执行一个conf.js文件后关闭。现在,当我查看之前的回复时,这就像添加延迟一样,这取决于我执行下一个动作的速度有多快或者是被击中或遗漏的情况。即使我们从调试角度考虑,大多数用户都会在一夜之间运行,他们希望在分析问题之前让浏览器活动几个小时。所以我开始研究量角器基本代码,并遇到了一个通用的解决方案,可以解决这个问题,独立于任何浏览器。目前,该解决方案特定于浏览器在执行一个conf.js文件后不应关闭的要求,如果有人可以添加一个配置参数,询问用户是否要在运行后关闭浏览器,则可以改进该解决方案。

浏览器可以通过在命令行中使用标记--seleniumSessionId来重用未来的conf.js文件。

解决方案:

  • 转到.. \ AppData \ Roaming \ npm \ node_modules \ protractor \ built where your 量角器已安装。
  • 打开driverProvider.js文件并转到函数quitDriver
  • 通过 返回0
  • 替换 return driver.quit()

就我目前的使用情况而言,代码更改似乎没有任何副作用,如果由于此更改而遇到任何其他问题,则会更新。下面的代码片段快照。

由于 格里森

代码段快照: Snapshot of code snippet

答案 1 :(得分:5)

在其功能结束时添加browser.pause()。在函数本身内。

答案 2 :(得分:4)

我建议您在点击操作之前使用browser.driver.sleep(500);

看到这一点。

browser.driver.sleep(500);

element(by.css('your button')).click();
browser.driver.sleep(500);

答案 3 :(得分:4)

It块中添加回调函数,浏览器窗口不会关闭,直到您调用它为止。 因此,请执行您需要的操作并在方便时放置回调

var submitBtnElm = $('input[data-behavior=saveContribution]');
  it('Should Search', function(callback) {
    browser.driver.get('http://localhost/enrollments/osda1.html');   
    browser.driver.findElement(by.id('contributePercentValue')).sendKeys(50);
    submitBtnElm.click().then(function() {
       // Have all the logic you need
       // Then invoke callback
       callback();
    });
  });

答案 4 :(得分:3)

使浏览器的最佳方法是不要关闭一段时间,请使用 browser.wait()。在wait函数内部写入逻辑,用于检查元素的visibilityOf()或invisibilityOf(),这是不可见的,或者在UI上变得不可见需要时间。在这种情况下,wait()继续检查逻辑,直到满足条件或达到超时。如果希望浏览器有更多时间,可以增加超时。

DELETE

答案 5 :(得分:2)

我确定按钮点击会在您的页面上触发更改。它可能像元素类更改一样微妙,或者像<p></p>元素一样显而易见,带有文本&#34;已保存&#34;显示。我会做的是,在测试之后,明确地等待这个改变。

[...]
return protractor.browser.wait(function() {
    return element(by.cssContainingText('p', 'Saved')).isPresent();
}, 10000);

您可以将这样的等待机制添加到spec文件的afterEach()方法中,这样即使没有Protractor Angular隐式等待,您的测试也会分开。

答案 6 :(得分:2)

var submitBtnElm = $('input[data-behavior=saveContribution]');

  it('Should Search', function() {
    browser.driver.get('http://localhost/enrollments/osda1.html');   
    browser.driver.findElement(by.id('contributePercentValue')).sendKeys(50);
    submitBtnElm.click().then(function() {

    });
    browser.pause(); // it should leave browser alive after test
  });

browser.pause()应该让浏览器保持活着状态,直到你放手。

@Edit另一种方法是在browser.get(...)之前设置browser.ignoreSynchronization = true。量角器不会等待Angular加载,你可以使用通常的元素(...)语法。

答案 7 :(得分:1)

我发现格里森的解决方案正在工作,这确实帮助了我。解决方法是...

  1. 转到%APPDATA%Roaming \ npm \ node_modules \ protractor \ built \ driverProviders \
  2. 找到driverProviders.js
  3. 在记事本或任何其他文本编辑器中打开
  4. 查找并替换返回驱动程序。Quit()返回0
  5. 保存文件

然后重新启动测试。

我正在使用 节点v8.12.0 npm v6.4.1 量角器v5.4.1

仅当您全局安装npm或量角器时,此解决方案才有效。如果您已在本地(在文件夹中)安装了npm或量角器,则必须转到本地量角器文件夹并执行相同的操作。

答案 8 :(得分:1)

量角器将关闭它创建的浏览器,所以我正在使用的一种方法是通过webdriver-reuse-session npm程序包启动浏览器。

免责声明:我是该软件包的作者

这是一个新软件包,所以请告诉我它是否可以解决您的问题。我正在成功使用它。