在无头模式下使用 selenium chrome 节点时,Protractor 在页面上找不到 Angular
Protractor could not find Angular on page when using selenium chrome node in headless mode
我正在使用量角器说明来确定我可以使用我的无头浏览器。
所以按照说明...
conf.js
exports.config = {
seleniumAddress: 'http://seleniumhub:4444/wd/hub',
multiCapabilities: [
{
browserName: 'firefox',
'moz:firefoxOptions': {
args: [
"--headless",
]
}
},
{
browserName: 'chrome',
chromeOptions: {
args: [
// chrome will crash without this
'--headless',
"--disable-gpu",
]
}
}
],
framework: 'jasmine2',
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 30000,
},
specs: ['todo-spec.js']
};
待办事项-spec.js
describe('angularjs homepage todo list', function() {
it('should add a todo', function() {
browser.get('https://angularjs.org');
element(by.model('todoList.todoText')).sendKeys('write first protractor test');
element(by.css('[value="add"]')).click();
var todoList = element.all(by.repeater('todo in todoList.todos'));
expect(todoList.count()).toEqual(3);
expect(todoList.get(2).getText()).toEqual('write first protractor test');
// You wrote your first test, cross it off the list
todoList.get(2).element(by.css('input')).click();
var completedAmount = element.all(by.css('.done-true'));
expect(completedAmount.count()).toEqual(2);
});
});
从我的节点 8.8.1 容器中 运行
./node_modules/.bin/protractor conf.js
标准的东西真的很香草,因为我想找出罪魁祸首。
当测试 运行 firefox 通过并且 chrome 失败并显示
E/protractor - Could not find Angular on page https://angularjs.org/ : retries looking for angular exceeded
有什么线索/想法/建议吗?
我的 "seleniumhub" 是一个带有 firefox 和 chrome 节点的 dockerised selenium 网格。一切都在版本 3.6.0.
版本总结...
- 节点 8.8.1 (docker)
- 硒集线器 3.6.0 (docker)
- 硒 Chrome 节点 3.6.0 (docker)
- Selenium Firefox 节点 3.6.0 (docker)
- 量角器 5.2.0
还有我的docker-compose.yml
version: "3.2"
services:
seleniumhub:
image: selenium/hub:${SELENIUM_VERSION}
networks:
- private
ports:
- 4444:4444
environment:
# As integer, maps to "maxSession"
GRID_MAX_SESSION: 10
# In milliseconds, maps to "newSessionWaitTimeout"
GRID_NEW_SESSION_WAIT_TIMEOUT: -1
# As a boolean, maps to "throwOnCapabilityNotPresent"
GRID_THROW_ON_CAPABILITY_NOT_PRESENT: 'true'
# As an integer
GRID_JETTY_MAX_THREADS: -1
# In milliseconds, maps to "cleanUpCycle"
GRID_CLEAN_UP_CYCLE: 5000
# In seconds, maps to "browserTimeout"
GRID_BROWSER_TIMEOUT: 0
# In seconds, maps to "timeout"
GRID_TIMEOUT: 30
# Debug
GRID_DEBUG: 'false'
depends_on:
- webserver
firefoxnode:
image: selenium/node-firefox${SELENIUM_DEBUG}:${SELENIUM_VERSION}
networks:
- private
volumes:
- /dev/urandom:/dev/random
- .:/tmp/app:cached
depends_on:
- seleniumhub
environment:
HUB_PORT_4444_TCP_ADDR: seleniumhub
HUB_PORT_4444_TCP_PORT: 4444
#
NODE_MAX_SESSION: 10
NODE_MAX_INSTANCES: 10
chromenode:
image: selenium/node-chrome${SELENIUM_DEBUG}:${SELENIUM_VERSION}
networks:
- private
volumes:
- /dev/urandom:/dev/random:ro
- /dev/shm:/dev/shm:ro
- .:/tmp/app:cached
depends_on:
- seleniumhub
environment:
HUB_PORT_4444_TCP_ADDR: seleniumhub
HUB_PORT_4444_TCP_PORT: 4444
#
NODE_MAX_SESSION: 10
NODE_MAX_INSTANCES: 10
node:
depends_on:
- seleniumhub
非常感谢
所以罪魁祸首是 /dev/urandom 和 /dev/shm 份额。
如果他们被删除,一切正常。
selenium 2.53.1 需要这些,但当前版本不需要。
所以享受剩下的配置吧。它只是工作。 :)
我正在使用量角器说明来确定我可以使用我的无头浏览器。
所以按照说明...
conf.js
exports.config = {
seleniumAddress: 'http://seleniumhub:4444/wd/hub',
multiCapabilities: [
{
browserName: 'firefox',
'moz:firefoxOptions': {
args: [
"--headless",
]
}
},
{
browserName: 'chrome',
chromeOptions: {
args: [
// chrome will crash without this
'--headless',
"--disable-gpu",
]
}
}
],
framework: 'jasmine2',
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 30000,
},
specs: ['todo-spec.js']
};
待办事项-spec.js
describe('angularjs homepage todo list', function() {
it('should add a todo', function() {
browser.get('https://angularjs.org');
element(by.model('todoList.todoText')).sendKeys('write first protractor test');
element(by.css('[value="add"]')).click();
var todoList = element.all(by.repeater('todo in todoList.todos'));
expect(todoList.count()).toEqual(3);
expect(todoList.get(2).getText()).toEqual('write first protractor test');
// You wrote your first test, cross it off the list
todoList.get(2).element(by.css('input')).click();
var completedAmount = element.all(by.css('.done-true'));
expect(completedAmount.count()).toEqual(2);
});
});
从我的节点 8.8.1 容器中 运行
./node_modules/.bin/protractor conf.js
标准的东西真的很香草,因为我想找出罪魁祸首。
当测试 运行 firefox 通过并且 chrome 失败并显示
E/protractor - Could not find Angular on page https://angularjs.org/ : retries looking for angular exceeded
有什么线索/想法/建议吗?
我的 "seleniumhub" 是一个带有 firefox 和 chrome 节点的 dockerised selenium 网格。一切都在版本 3.6.0.
版本总结...
- 节点 8.8.1 (docker)
- 硒集线器 3.6.0 (docker)
- 硒 Chrome 节点 3.6.0 (docker)
- Selenium Firefox 节点 3.6.0 (docker)
- 量角器 5.2.0
还有我的docker-compose.yml
version: "3.2"
services:
seleniumhub:
image: selenium/hub:${SELENIUM_VERSION}
networks:
- private
ports:
- 4444:4444
environment:
# As integer, maps to "maxSession"
GRID_MAX_SESSION: 10
# In milliseconds, maps to "newSessionWaitTimeout"
GRID_NEW_SESSION_WAIT_TIMEOUT: -1
# As a boolean, maps to "throwOnCapabilityNotPresent"
GRID_THROW_ON_CAPABILITY_NOT_PRESENT: 'true'
# As an integer
GRID_JETTY_MAX_THREADS: -1
# In milliseconds, maps to "cleanUpCycle"
GRID_CLEAN_UP_CYCLE: 5000
# In seconds, maps to "browserTimeout"
GRID_BROWSER_TIMEOUT: 0
# In seconds, maps to "timeout"
GRID_TIMEOUT: 30
# Debug
GRID_DEBUG: 'false'
depends_on:
- webserver
firefoxnode:
image: selenium/node-firefox${SELENIUM_DEBUG}:${SELENIUM_VERSION}
networks:
- private
volumes:
- /dev/urandom:/dev/random
- .:/tmp/app:cached
depends_on:
- seleniumhub
environment:
HUB_PORT_4444_TCP_ADDR: seleniumhub
HUB_PORT_4444_TCP_PORT: 4444
#
NODE_MAX_SESSION: 10
NODE_MAX_INSTANCES: 10
chromenode:
image: selenium/node-chrome${SELENIUM_DEBUG}:${SELENIUM_VERSION}
networks:
- private
volumes:
- /dev/urandom:/dev/random:ro
- /dev/shm:/dev/shm:ro
- .:/tmp/app:cached
depends_on:
- seleniumhub
environment:
HUB_PORT_4444_TCP_ADDR: seleniumhub
HUB_PORT_4444_TCP_PORT: 4444
#
NODE_MAX_SESSION: 10
NODE_MAX_INSTANCES: 10
node:
depends_on:
- seleniumhub
非常感谢
所以罪魁祸首是 /dev/urandom 和 /dev/shm 份额。 如果他们被删除,一切正常。
selenium 2.53.1 需要这些,但当前版本不需要。
所以享受剩下的配置吧。它只是工作。 :)