Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么browser.get方法不转到指定的url?_Javascript_Node.js_Testing_Protractor - Fatal编程技术网

Javascript 为什么browser.get方法不转到指定的url?

Javascript 为什么browser.get方法不转到指定的url?,javascript,node.js,testing,protractor,Javascript,Node.js,Testing,Protractor,我的文件夹结构如下: 我也跟着 我的package.json文件如下所示: { "name": "node_cucumber_e2e", "version": "1.0.1", "description": "Sample E2E by Bill to learn cucumber and protractor", "main": "index.js", "scripts": { "start": "node index.js", "start-driver

我的文件夹结构如下:

我也跟着

我的package.json文件如下所示:

{
  "name": "node_cucumber_e2e",
  "version": "1.0.1",
  "description": "Sample E2E by Bill to learn cucumber and protractor",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "start-driver": "node .\\node_modules\\protractor\\bin\\webdriver-manager start",
    "update-driver": "node .\\node_modules\\protractor\\bin\\webdriver-manager update",
    "protractor": "node .\\node_modules\\protractor\\bin\\protractor configs/protractor.conf.js"
  },
  "keywords": [
    "Sample_project",
  ],
  "author": "",
  "license": "MIT",
  "devDependencies": {
    "protractor": "^5.4.2"
  }
}
我做以下事情:

  • 本地安装量角器
  • 通过
    npm运行更新驱动程序
  • 通过
    npm运行启动驱动程序启动webdriver管理器
  • 编辑dragrator.conf,如下所示
  • 然后,当我试图通过
    npm run grandor
    启动量角器时,浏览器是打开的,但它不会转到我指定的url,控制台是this==>

    我的spec js文件是,希望有人能帮我

    describe('Protractor Demo App', function() {
        it ('should have a title', function() {
            browser.get('https://juliemr.github.io/protractor-demo/');
            expect(browser.getTitle()).toEqual('Super Calculator');
        });
    });
    

    这里需要注意的几件事:

  • 调用selenium驱动程序运行测试的方式。还有其他的方法。我更喜欢使用
    directConnect=true
    并选择
    headless
    选项,以便在遇到问题时能够更好地进行调试。请参阅下面的代码片段以了解
    dragrator-conf.js
    文件:

    export const config:config={
    directConnect:没错,
    能力:{
    'browserName':'chrome',
    色度选项:{
    //参数:[“--headless”,“--disable gpu”]
    },
    },
    }
    
  • 由于我们正在进行的
    browser.get()&browser.getTitle()
    是一个异步调用,因此您可以使用
    then()
    wait
    为每个
    async
    调用处理返回的调用

    我更喜欢使用
    async/await
    来处理此类调用,我会将
    spec
    重写为:

    description('量角器演示应用',()=>{
    它('应该有一个标题',async()=>{
    等待浏览器。获取https://juliemr.github.io/protractor-demo/');
    expect(wait browser.getTitle()).toEqual('SuperCalculator');
    });
    });
    
    在我看来,它有助于更有效地处理承诺,同时保持代码的整洁。 让我知道这是否适合你

  • 进一步改进

    要更新webdriver manager,请在
    包.json中使用

     "webdriver-update": "./node_modules/protractor/bin/webdriver-manager update"
    

    与npm运行更新驱动程序不同,这里需要注意两件事:

  • 调用selenium驱动程序运行测试的方式。还有其他的方法。我更喜欢使用
    directConnect=true
    并选择
    headless
    选项,以便在遇到问题时能够更好地进行调试。请参阅下面的代码片段以了解
    dragrator-conf.js
    文件:

    export const config:config={
    directConnect:没错,
    能力:{
    'browserName':'chrome',
    色度选项:{
    //参数:[“--headless”,“--disable gpu”]
    },
    },
    }
    
  • 由于我们正在进行的
    browser.get()&browser.getTitle()
    是一个异步调用,因此您可以使用
    then()
    wait
    为每个
    async
    调用处理返回的调用

    我更喜欢使用
    async/await
    来处理此类调用,我会将
    spec
    重写为:

    description('量角器演示应用',()=>{
    它('应该有一个标题',async()=>{
    等待浏览器。获取https://juliemr.github.io/protractor-demo/');
    expect(wait browser.getTitle()).toEqual('SuperCalculator');
    });
    });
    
    在我看来,它有助于更有效地处理承诺,同时保持代码的整洁。 让我知道这是否适合你

  • 进一步改进

    要更新webdriver manager,请在
    包.json中使用

     "webdriver-update": "./node_modules/protractor/bin/webdriver-manager update"
    

    与您提供的教程中的
    npm run update driver

    不同,您提供的教程调用了
    然后
    关于
    browser.get
    的返回值,这意味着
    browser.get
    返回一个
    Promise
    。您还应该调用
    然后
    或切换到
    async/await
    。我查看了
    browser.get
    ,这是一种误导,看起来这个方法是同步的,而不是同步的,查看
    browser.get
    它肯定返回了
    Promise
    @JakeHolzinger,量角器版本低于6(OP正在使用的版本)除非使用配置中的
    SELENIUM\u promise\u manager:false
    设置显式禁用,否则承诺将在幕后使用webdriverJS的承诺管理器进行处理。这允许以上述方式编写异步操作。我不知道为什么那个教程是这样写的,因为那个不应该是必需的。OP,您可以尝试在
    之后添加
    浏览器.driver.sleep(5000)
    。get
    并验证与您提供的教程相同的行为调用
    ,然后在
    浏览器的返回值上调用
    。get
    ,这意味着
    浏览器.get
    返回
    承诺。您还应该调用
    然后
    或切换到
    async/await
    。我查看了
    browser.get
    ,这是一种误导,看起来这个方法是同步的,而不是同步的,查看
    browser.get
    它肯定返回了
    Promise
    @JakeHolzinger,量角器版本低于6(OP正在使用的版本)除非使用配置中的
    SELENIUM\u promise\u manager:false
    设置显式禁用,否则承诺将在幕后使用webdriverJS的承诺管理器进行处理。这允许以上述方式编写异步操作。我不知道为什么那个教程是这样写的,因为那个不应该是必需的。OP,您可以尝试在
    之后添加
    浏览器.driver.sleep(5000)
    。获取
    并验证相同的行为吗