Protractor: Existe uma maneira de especificar um servidor proxy no Config?

Criado em 28 set. 2013  ·  24Comentários  ·  Fonte: angular/protractor

question

Comentários muito úteis

capabilities: {
  'proxy': {
    'proxyType': 'manual',
    'httpProxy': 'hostname.com:1234'
  }
}

Todos 24 comentários

Você pode mostrar um exemplo disso?

Você precisa especificá-lo na seção capabilities da configuração. Confira este documento para obter informações sobre como criar a configuração JSON para proxies webdriver: https://code.google.com/p/selenium/wiki/DesiredCapabilities#Proxy_JSON_Object

Tentei, realmente não funcionou para mim. Pode ser minha inexperiência com isso. Você ou alguém tem um exemplo rápido que você pode mostrar? Seria um longo caminho.

capabilities: {
  'proxy': {
    'proxyType': 'manual',
    'httpProxy': 'hostname.com:1234'
  }
}

Esta solução não está funcionando para nossa configuração. Alguma ideia do que estou fazendo de errado? Eu recebo o seguinte erro na linha de comando ao tentar executar o Protractor:

> Fatal error: protractor exited with code: 1

Aqui está meu arquivo de configuração:

// A reference configuration file.
exports.config = {
   // ----- How to setup Selenium -----
   //
   // There are three ways to specify how to use Selenium. Specify one of the
   // following:
   //
   // 1. seleniumServerJar - to start Selenium Standalone locally.
   // 2. seleniumAddress - to connect to a Selenium server which is already
   //    running.
   // 3. sauceUser/sauceKey - to use remote Selenium servers via SauceLabs.

   // The location of the selenium standalone server .jar file.
   seleniumServerJar: './selenium/selenium-server-standalone-2.35.0.jar',
   // The port to start the selenium server on, or null if the server should
   // find its own unused port.
   seleniumPort: null,
   // Chromedriver location is used to help the selenium standalone server
   // find chromedriver. This will be passed to the selenium jar as
   // the system property webdriver.chrome.driver. If null, selenium will
   // attempt to find chromedriver using PATH.
   chromeDriver: './selenium/chromedriver',
   // Additional command line options to pass to selenium. For example,
   // if you need to change the browser timeout, use
   // seleniumArgs: ['-browserTimeout=60'],
   seleniumArgs: [],

   // If sauceUser and sauceKey are specified, seleniumServerJar will be ignored.
   // The tests will be run remotely using SauceLabs.
   sauceUser: null,
   sauceKey: null,

   // ----- What tests to run -----
   //
   // Spec patterns are relative to the location of this config.
   specs: [
      './e2e/*-spec.js'
   ],

   // ----- Capabilities to be passed to the webdriver instance ----
   //
   // For a full list of available capabilities, see
   // https://code.google.com/p/selenium/wiki/DesiredCapabilities
   // and
   // https://code.google.com/p/selenium/source/browse/javascript/webdriver/capabilities.js
   capabilities: {
      'browserName': 'chrome',
      'proxy': {
         'proxyType': 'manual',
         'httpProxy': 'https://localhost.com:8443/'
      }
   },

   // A base URL for your application under test. Calls to protractor.get()
   // with relative paths will be prepended with this.
   baseUrl: 'http://localhost:9999',

   // Selector for the element housing the angular app - this defaults to
   // body, but is necessary if ng-app is on a descendant of <body>
   rootElement: 'body',

   // ----- Options to be passed to minijasminenode -----
   jasmineNodeOpts: {
      // onComplete will be called just before the driver quits.
      onComplete: null,
      // If true, display spec names.
      isVerbose: true,
      // If true, print colors to the terminal.
      showColors: true,
      // If true, include stack traces in failures.
      includeStackTrace: true,
      // Default time to wait in ms before a test fails.
      defaultTimeoutInterval: 10000
   }
};

Tentei seus recursos e funcionou para mim. Quando coloco um httpProxy falso, vejo erros 'não foi possível conectar ao proxy' no navegador, mas os testes ainda tentam ser executados. Seus testes são executados corretamente sem o proxy? Como eles falham nesse caso?

Ok, o que eu descobri que funciona é apenas definir a baseurl para o site de teste https, assim:

exports.config = {
   seleniumServerJar: './selenium/selenium-server-standalone-2.35.0.jar',

   seleniumPort: null,

   chromeDriver: './selenium/chromedriver',

   seleniumArgs: [],

   sauceUser: null,
   sauceKey: null,

   specs: [
      './e2e/*-spec.js'
   ],

   capabilities: {
      'browserName': 'chrome'
   },

   baseUrl: 'https://localhost:8443/',

   rootElement: 'body',

   jasmineNodeOpts: {
      // onComplete will be called just before the driver quits.
      onComplete: null,
      // If true, display spec names.
      isVerbose: true,
      // If true, print colors to the terminal.
      showColors: true,
      // If true, include stack traces in failures.
      includeStackTrace: true,
      // Default time to wait in ms before a test fails.
      defaultTimeoutInterval: 10000
   }
};

Oi,

Consegui fazer o proxy funcionar com o que vocês fizeram aqui, então obrigado por isso, agora quero adicionar a variável noProxy para que eu possa excluir meus serviços internos de irem para o proxy. Eu tentei o seguinte, mas a parte noProxy não está sendo usada. Estou usando o PhantomJs.

  'proxy': {
      'proxyType': 'manual',
      'httpProxy': 'http://proxy.blah.co.uk:8080'
      'httpsProxy': 'http://proxy.blah.co.uk:8080'
      'noProxy': 'blah.blah.co.uk,*blah.blah.co.uk,.blah.blah.co.uk'
  }

},

Oi,
Não consegui fazer funcionar com um proxy autenticado. Eu tentei:

'proxy': {
  'proxyType': 'manual',
  'httpProxy': 'user:[email protected]:3128'
  'sslProxy': 'user:[email protected]:3128'
}

e

'proxy': {
  'proxyType': 'manual',
  'httpProxy': 'http://user:[email protected]:3128'
  'sslProxy': 'http://user:[email protected]:3128'
}

Estou tentando concluir https://docs.angularjs.org/tutorial/step_03 , usando o navegador Chrome.

Também não funciona para mim - preciso fornecer host: port junto com o nome de usuário / senha e tentei todas as sugestões acima e nada parece estar funcionando. No entanto, quando saio da Internet da empresa e tento sem proxy, tudo funciona bem. Qualquer ajuda?

Na verdade, meu problema foi resolvido configurando variáveis ​​de sistema

 http_proxy   http://user:password<strong i="6">@proxy_url</strong>:port
 https_proxy   http://user:password<strong i="7">@proxy_url</strong>:port

Isso precisa ser reaberto, aqui na GE Software, definir o http_proxy e https_proxy na configuração ainda não permite que o Protractor envie ao Saucelabs o código de saída final dos resultados do teste, fazendo com que o Saucelabs falhe no teste por inatividade.

@jonniespratley protractor config --proxy=http://user:password<strong i="6">@proxy_url</strong>:port não funciona para você?

Tentei executar o teste de transferidor no laboratório de molhos, mas obtive o erro ETIMEDOUT. Estou atrás do firewall corporativo e configurei o proxy no arquivo de configuração do transferidor e na variável de ambiente. A configuração parece não funcionar. Abaixo está o erro que estou recebendo

Error: ETIMEDOUT connect ETIMEDOUT 151.444.33.22:80
    at ClientRequest.<anonymous> (/Users/user123/Desktop/Sample/example-sandbox/node_modules/protractor/node_modules/selenium-webdriver/http/index.js:174:16)
    at emitOne (events.js:77:13)
    at ClientRequest.emit (events.js:169:7)
    at Socket.socketErrorListener (_http_client.js:259:9)
    at emitOne (events.js:77:13)
    at Socket.emit (events.js:169:7)
    at emitErrorNT (net.js:1253:8)
    at doNTCallback2 (node.js:439:9)
    at process._tickCallback (node.js:353:17)
From: Task: WebDriver.createSession()
    at Function.webdriver.WebDriver.acquireSession_ (/Users/user123/Desktop/Sample/example-sandbox/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:157:22)
    at Function.webdriver.WebDriver.createSession (/Users/user123/Desktop/Sample/example-sandbox/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:131:30)
    at [object Object].Builder.build (/Users/user123/Desktop/Sample/example-sandbox/node_modules/protractor/node_modules/selenium-webdriver/builder.js:445:22)
    at [object Object].DriverProvider.getNewDriver (/Users/user123/Desktop/Sample/example-sandbox/node_modules/protractor/lib/driverProviders/driverProvider.js:42:27)
    at [object Object].Runner.createBrowser (/Users/user123/Desktop/Sample/example-sandbox/node_modules/protractor/lib/runner.js:190:37)
    at /Users/user123/Desktop/Sample/example-sandbox/node_modules/protractor/lib/runner.js:280:21
    at _fulfilled (/Users/user123/Desktop/Sample/example-sandbox/node_modules/protractor/node_modules/q/q.js:834:54)
    at self.promiseDispatch.done (/Users/user123/Desktop/Sample/example-sandbox/node_modules/protractor/node_modules/q/q.js:863:30)
    at Promise.promise.promiseDispatch (/Users/user123/Desktop/Sample/example-sandbox/node_modules/protractor/node_modules/q/q.js:796:13)
    at /Users/user123/Desktop/Sample/example-sandbox/node_modules/protractor/node_modules/q/q.js:556:49
[launcher] Process exited with error code 1

Qualquer ideia? Eu realmente aprecio a ajuda.

Estou recebendo erros semelhantes. Estou atrás de um proxy corporativo e não consigo enviar um teste para o browserstack.

/Users/Documents/coding/sublime/simpleboilerplate/node_modules/selenium-webdriver/lib/promise.js:654
    throw error;
    ^

Error: ETIMEDOUT connect ETIMEDOUT 208.52.180.201:80
    at ClientRequest.<anonymous> (/Users/Documents/coding/sublime/simpleboilerplate/node_modules/selenium-webdriver/http/index.js:381:15)
    at emitOne (events.js:77:13)
    at ClientRequest.emit (events.js:169:7)
    at Socket.socketErrorListener (_http_client.js:259:9)
    at emitOne (events.js:77:13)
    at Socket.emit (events.js:169:7)
    at emitErrorNT (net.js:1253:8)
    at doNTCallback2 (node.js:441:9)
    at process._tickCallback (node.js:355:17)
From: Task: WebDriver.createSession()
    at Function.createSession (/Users/Documents/coding/sublime/simpleboilerplate/node_modules/selenium-webdriver/lib/webdriver.js:329:24)
    at Builder.build (/Users/Documents/coding/sublime/simpleboilerplate/node_modules/selenium-webdriver/builder.js:458:24)
    at Object.<anonymous> (/Users/Documents/coding/sublime/simpleboilerplate/bs.js:13:3)
    at Module._compile (module.js:435:26)
    at Object.Module._extensions..js (module.js:442:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:311:12)
    at Function.Module.runMain (module.js:467:10)
    at startup (node.js:136:18)
    at node.js:963:3
From: Task: WebDriver.navigate().to(http://www.google.com)
    at WebDriver.schedule (/Users/Documents/coding/sublime/simpleboilerplate/node_modules/selenium-webdriver/lib/webdriver.js:377:17)
    at Navigation.to (/Users/Documents/coding/sublime/simpleboilerplate/node_modules/selenium-webdriver/lib/webdriver.js:1027:25)
    at WebDriver.get (/Users/Documents/coding/sublime/simpleboilerplate/node_modules/selenium-webdriver/lib/webdriver.js:795:28)
    at Object.<anonymous> (/Users/Documents/coding/sublime/simpleboilerplate/bs.js:15:8)
    at Module._compile (module.js:435:26)
    at Object.Module._extensions..js (module.js:442:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:311:12)
    at Function.Module.runMain (module.js:467:10)
    at startup (node.js:136:18)

O que finalmente funcionou para sairmos de nosso proxy corporativo e irmos para o servidor de selênio do perfecto mobile foi usar a configuração webDriverProxy :

exports.config = {
    framework: 'jasmine',
    seleniumAddress: 'https://yourCloudName.perfectomobile.com/nexperience/perfectomobile/wd/hub',

    webDriverProxy: 'http://your.proxy.here:8080',

    capabilities: { ... },
    specs: ['myspec.js']
};

Estou trabalhando por trás do proxy corporativo, tentei adicionar este código em conf.js
'proxy': {
'proxyType': 'manual',
'httpProxy': ' usuário: [email protected]: 8080'
'sslProxy': ' usuário: [email protected]: 8080'
}

estava funcionando bem, mas o tempo de execução do aplicativo aumentou, resultando em falha. Sim, posso aumentar o tempo padrão, mas não quero que meu aplicativo demore mais para ser executado.
Alguém pode me ajudar a consertar isso.

Desde já, obrigado.

@gregjacobs Estou usando o webDriverProxy com perfecto também. Estava funcionando para mim há algum tempo. Depois de atualizar para 4.x ou 5.x, não consegui mais fazê-lo funcionar. Ainda funciona para você após a atualização?

Nenhuma das opções de proxy de https://github.com/angular/protractor/blob/master/lib/config.ts funciona para mim. Alguém teve sorte ao configurar o proxy na v5?

@ deli6z
Proxy e transferidor BrowserMob estabelecido com esses recursos - funciona bem

  capabilities: {
    'browserName': 'chrome',
    'args': ['disable-web-security'],
    'proxy': {
      'proxyType': 'manual',
      'httpProxy': '10.179.70.127:10801',
      'sslProxy': '10.179.70.127:10801',
      "autodetect": 'false'

    }
}

@gregjacobs Preciso especificar um nome de usuário / senha para nosso proxy usado na propriedade webDriverProxy . Você sabe como?

@ luker2 Infelizmente não tenho certeza, mas webDriverProxy: 'http://username:[email protected]:8080' não funciona? (onde 8080 é a porta do seu proxy?)

@gregjacobs sim, eu não tinha seguido ainda, mas foi isso que acabou funcionando!

Para outros, eu também tive que codificar url a parte do nome de usuário: senha para escapar de caracteres especiais ...

webDriverProxy: `http://${encodeURIComponent(username)}:${encodeURIComponent(password)}@your.proxy.here:8080`

@ luker2 Incrível, fico feliz em saber que você está funcionando! E obrigado por postar aquele artigo sobre a codificação uri do nome de usuário e senha - bom pegadinha!

Esta página foi útil?
0 / 5 - 0 avaliações