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

Protractor 编写量角器测试用例时如何停止自动关闭浏览器,protractor,Protractor,我不熟悉使用量角器编写非角度应用程序的测试用例。我编写了一个示例测试用例。在这里,浏览器在运行测试用例后自动关闭。我如何防止这种情况发生。这是我的密码 var submitBtnElm = $('input[data-behavior=saveContribution]'); it('Should Search', function() { browser.driver.get('http://localhost/enrollments/osda1.html');

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

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.driver.sleep(500)在单击操作之前

看这个

browser.driver.sleep(500);

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

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();
    });
  });

我确信点击按钮会在您的页面上触发更改。它可能像元素上的类更改一样微妙,也可能像显示文本“Saved”的

元素一样明显。我要做的是,在测试之后,显式地等待这个更改

[...]
return protractor.browser.wait(function() {
    return element(by.cssContainingText('p', 'Saved')).isPresent();
}, 10000);
您可以将这样的等待机制添加到spec文件的
afterEach()
方法中,这样即使没有量角器角度隐式等待,您的测试也可以分开

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()应使浏览器保持活动状态,直到您放开它


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

在it函数末尾添加
browser.pause()
。在函数本身内。

要使浏览器在一段时间内不关闭,最好使用browser.wait()。在wait函数内部,编写用于检查元素的visibilityOf()或invisibilityOf()的逻辑,该元素不可见,或者在UI上变为不可见需要时间。在本例中,wait()继续检查逻辑,直到满足条件或达到超时。如果希望浏览器显示更多时间,可以增加超时

var EC=protractor.ExpectedConditions;
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.wait(function(){
            EC.invisibilityOf(submitBtnElm).call().then(function(isPresent){
                if(isPresent){
                    return true;
                }
            });
        },20000,'error message');
    });
  });

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

通过在命令行中使用tag--seleniumSessionId,可以为将来运行的conf.js文件重用浏览器

解决方案:

  • 转到..\AppData\Roaming\npm\node\u modules\dragrator\builded,您的 已安装量角器
  • 打开driverProvider.js文件并转到函数quitDriver
  • 将返回驱动程序.quit()替换为返回0
就我目前的使用情况而言,代码更改似乎并没有任何副作用,若我遇到任何其他问题,将会更新。下面是代码片段的快照

谢谢 格雷森

代码片段快照:

我发现Gleeson的解决方案是有效的,这确实帮助了我。解决办法是

  • 转到%APPDATA%Roaming\npm\node\u modules\dragrator\builded\driverProviders\
  • 查找driverProviders.js
  • 在记事本或任何其他文本编辑器中打开它
  • 查找并替换返回驱动程序。Quit()返回0
  • 保存文件
  • 然后重新启动测试

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


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

    量角器将关闭它创建的浏览器,因此我使用的方法是通过npm包启动浏览器

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


    这是一个新的软件包,所以如果它解决了您的问题,请告诉我。我使用它非常成功

    你能再解释一下你的问题吗?您所说的浏览器自动关闭是什么意思?浏览器运行完脚本后是否应该关闭?Thanks@GirishSortur我想执行单击操作。但浏览器在触发单击之前关闭。我已更新问题中的代码。窗口关闭后控制台中是否有日志?量角器/jasmine在最后报告了什么?我猜窗口正在关闭,因为您的定位器看起来不正确,并且抛出了一个错误,您在属性周围缺少引号。应该是
    var submitBtnElm=$('input[data behavior=“saveContribution”]”)这里有一个简单但有效的答案我有一个类似的问题,我使用browser.sleep(1000);但这并没有解决我的问题,我甚至更改了默认的超时间隔=120000;但是没有结果总是我的所有测试都在页面加载之前通过!增加这样的睡眠不是一个好的做法。请参阅下面的解决方案,如果您使用回调函数来保持浏览器窗口打开它似乎不工作,无论是在函数内或OutsHI格里森-您应该考虑在您的答案中直接发布您的代码。这将使索引和引用更容易。