- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我使用这个属性来定义屏幕的宽度和高度:
var width = 1280;
var height = 600;
browser.driver.manage().window().setSize(width, height);
在 onPrepare() 方法中,但此代码对某些测试有效,但对所有测试无效。这是为什么?我不会在测试中重新定义屏幕尺寸。
问候,
强尼
编辑:我的 Node 版本是 0.10.33,带有 Protactor 2.5.1。
Protractor 的配置:
// Fichier de configuration pour Angular
exports.config = {
sauceUser: "",
sauceKey: "",
capabilities: {
'browserName': 'chrome',
'name': 'Protractor Circle CI'
},
specs: ["src/Bg/*Bundle/Tests/Angular/*Test.js"],
exclude: ['src/Bg/*Bundle/Tests/Angular/*AuthTest.js', 'src/Bg/*Bundle/Tests/Angular/*RapideTest.js'],
baseUrl: "http://bluegrey.circle.dev:8080/app_ci.php",
onPrepare: function() {
browser.driver.get('http://bluegrey.circle.dev:8080/app_ci.php/fr_FR/login');
browser.driver.findElement(by.id('username')).sendKeys('user@evolunium.fr');
browser.driver.findElement(by.id('password')).sendKeys('userpass');
browser.driver.findElement(by.id('_submit')).click();
return browser.driver.wait(function() {
return browser.driver.getCurrentUrl().then(function(url) {
return /dashboard/.test(url);
});
}, 600000);
var width = 1280;
var height = 600;
browser.driver.manage().window().setSize(width, height);
},
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 30000
}
};
一个有效的测试示例:
describe("Carrière > Centre d'interêt", function () {
describe("Tests d'ajout et de suppression d'un centre d'interêt", function () {
beforeEach(function () {
// on compte le nombre d'element
elements = element.all(by.css('.bloc__defaut'));
elements.count().then(function (nbElementP) {
nbElement = nbElementP;
});
}, 60000);
it('GET /app_ci.php/fr_FR/dashboard/career/interest', function () {
browser.get('/app_ci.php/fr_FR/dashboard/career/interest');
}, 60000);
it("Ajout du centre d'interêt", function () {
// On clique sur ajouter
element(by.css('.btn-add-js')).click();
// On remplit le formulaire
browser.findElement(by.id('CentreInteret_intitule')).sendKeys('CentreInteret_intitule');
element(by.css('.u-btn-inverse')).click();
// on re-compte le nombre d'element
expect(elements.count()).toEqual(nbElement+1);
}, 60000);
it("Suppression d'un centre d'interêt", function () {
// On regarde si toutes les fenetres de suppressions sont cachés au début
expect(element(by.css('.bloc__suppression')).isDisplayed()).toBeFalsy();
// On clique sur supprimer
element(by.css('.u-btn-alert')).click();
// On regarde si la fenetre de confirmation de suppression est présente
expect(element(by.css('.bloc__suppression')).isDisplayed()).toBeTruthy();
// On clique sur supprimer
element(by.css('.btn-supprimer-js')).click();
// On regarde si l'element est caché
expect(element(by.css('.bloc__suppression')).isDisplayed()).toBeFalsy();
}, 60000);
});
});
还有一个失败的测试:
describe('Carrière > Experience Pro', function () {
describe("Tests d'ajout et de suppression d'une experience pro", function () {
beforeEach(function () {
// on compte le nombre d'element
elements = element.all(by.css('.bloc__defaut'));
elements.count().then(function (nbElementP) {
nbElement = nbElementP;
});
}, 60000);
it('GET /app_ci.php/fr_FR/dashboard/career/professionalexperiences', function () {
browser.get('/app_ci.php/fr_FR/dashboard/career/professionalexperiences');
}, 60000);
it('Vérification si lors du clique de la checkbox le champs date se désactive', function () {
// On clique sur ajouter
element(by.css('.btn-add-js')).click();
// On regarde si par defaut les champs ne sont pas désactivés (= active)
expect(element(by.id('ExperiencePro_dateFin_day')).getAttribute('disabled')).toBeFalsy();
expect(element(by.id('ExperiencePro_dateFin_month')).getAttribute('disabled')).toBeFalsy();
expect(element(by.id('ExperiencePro_dateFin_year')).getAttribute('disabled')).toBeFalsy();
// On clique
element(by.id('ExperiencePro_enPosteajout')).click();
// On regarde si les champs sont desactivés
expect(element(by.id('ExperiencePro_dateFin_day')).getAttribute('disabled')).toBeTruthy();
expect(element(by.id('ExperiencePro_dateFin_month')).getAttribute('disabled')).toBeTruthy();
expect(element(by.id('ExperiencePro_dateFin_year')).getAttribute('disabled')).toBeTruthy();
// On regarde s'ils se redésactive
element(by.id('ExperiencePro_enPosteajout')).click();
expect(element(by.id('ExperiencePro_dateFin_day')).getAttribute('disabled')).toBeFalsy();
expect(element(by.id('ExperiencePro_dateFin_month')).getAttribute('disabled')).toBeFalsy();
expect(element(by.id('ExperiencePro_dateFin_year')).getAttribute('disabled')).toBeFalsy();
}, 120000);
it("Réglage du format de date", function () {
// Format mois/année
element(by.id('reglageDate-js')).click();
element(by.id('ExperiencePro_formatDate_1')).click();
expect(element(by.id('ExperiencePro_dateDebut_day')).isDisplayed()).toBeFalsy();
expect(element(by.id('ExperiencePro_dateDebut_month')).isDisplayed()).toBeTruthy();
expect(element(by.id('ExperiencePro_dateDebut_year')).isDisplayed()).toBeTruthy();
// Format année
element(by.id('reglageDate-js')).click();
element(by.id('ExperiencePro_formatDate_2')).click();
expect(element(by.id('ExperiencePro_dateDebut_day')).isDisplayed()).toBeFalsy();
expect(element(by.id('ExperiencePro_dateDebut_month')).isDisplayed()).toBeFalsy();
expect(element(by.id('ExperiencePro_dateDebut_year')).isDisplayed()).toBeTruthy();
// Format année
element(by.id('reglageDate-js')).click();
element(by.id('ExperiencePro_formatDate_0')).click();
expect(element(by.id('ExperiencePro_dateDebut_day')).isDisplayed()).toBeTruthy();
expect(element(by.id('ExperiencePro_dateDebut_month')).isDisplayed()).toBeTruthy();
expect(element(by.id('ExperiencePro_dateDebut_year')).isDisplayed()).toBeTruthy();
}, 60000);
it("Ajout de l'experience", function () {
// On remplit le formulaire
browser.findElement(protractor.By.css('#ExperiencePro_dateDebut_day option[value="1"]')).click();
browser.findElement(protractor.By.css('#ExperiencePro_dateDebut_month option[value="12"]')).click();
browser.findElement(protractor.By.css('#ExperiencePro_dateDebut_year option[value="2000"]')).click();
element(by.id('ExperiencePro_enPosteajout')).click();
element(by.id('reglageDate-js')).click();
element(by.id('ExperiencePro_formatDate_0')).click();
browser.findElement(by.id('ExperiencePro_poste-ajout')).sendKeys('ExperiencePro_poste');
browser.findElement(by.id('ExperiencePro_entreprise')).sendKeys('ExperiencePro_entreprise');
browser.findElement(by.id('ExperiencePro_ville')).sendKeys('ExperiencePro_ville');
element(by.css('.u-btn-inverse')).click();
// on re-compte le nombre d'element
expect(elements.count()).toEqual(nbElement+1);
}, 60000);
it("Suppression d'une experience", function () {
expect(element(by.css('.bloc__suppression')).isDisplayed()).toBeFalsy();
// On clique sur supprimer
element(by.css('.u-btn-alert')).click();
// On regarde si la fenetre de confirmation de suppression est présente
expect(element(by.css('.bloc__suppression')).isDisplayed()).toBeTruthy();
// On clique sur supprimer
element(by.css('.btn-supprimer-js')).click();
// On regarde si la fenetre affirmant la suppression est apparue
expect(element(by.css('.bloc__suppression')).isDisplayed()).toBeFalsy();
}, 60000);
});
});
编辑 2:这可能是视口(viewport)的问题而不是屏幕尺寸的问题。我用 SauceLabs 在 Chrome、Firefox、Safari 上试过,它是同样的问题。
最佳答案
您实际上是在调用 setSize()
之前从 onPrepare()
函数返回:
onPrepare: function() {
browser.driver.get('http://bluegrey.circle.dev:8080/app_ci.php/fr_FR/login');
browser.driver.findElement(by.id('username')).sendKeys('user@evolunium.fr');
browser.driver.findElement(by.id('password')).sendKeys('userpass');
browser.driver.findElement(by.id('_submit')).click();
// HERE!!
return browser.driver.wait(function() {
return browser.driver.getCurrentUrl().then(function(url) {
return /dashboard/.test(url);
});
}, 600000);
var width = 1280;
var height = 600;
browser.driver.manage().window().setSize(width, height);
},
您应该删除“返回”,或者在它之前设置浏览器窗口大小。
您还可以返回由 setSize()
返回的 promise - 在这种情况下,protractor
将在执行测试之前等待解决 promise :
return browser.driver.manage().window().setSize(width, height);
他们现在甚至拥有这个“功能”documented :
onPrepare
can optionally return a promise, which Protractor will wait for before continuing execution. This can be used if the preparation involves any asynchronous calls, e.g. interacting with the browser. Otherwise Protractor cannot guarantee order of execution and may start the tests before preparation finishes.
关于javascript - Protractor :屏幕尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33677458/
我有一个表,其中包含3行数据和3个删除按钮。我想删除所有数据行,因此想在我的页面对象中编写一个方法来做到这一点……这应该很简单,但我无法使其正常工作。我正在这样尝试: this.rows = elem
我们有一个应用程序,在本地进行测试会显示无效的SSL证书警告。通常,我只添加一个异常并继续处理。但是, Protractor 有无视这一点吗? 我已经看到了 Selenium 中的一些功能,其中可以忽
我有一个关于我的代码和不同行为的问题,具体取决于使用的 Protractor 版本。 我的测试使用 Protractor 版本 2.5.1。但要从最新发展中获得所有好处,我 试图移动到版本 3.x。
我有一个项目已经运行了很长时间。 最近(几周)系统测试失败了。 经过大量调查,我们得出结论, Protractor 无法识别和关闭警报。 曾经工作的代码 exports.removeFaq = fun
我能够成功运行 Protractor 脚本。下面是我用来运行 Protractor 脚本的 protractor.config.js 文件。 var Jasmine2Reporter = requir
在 Protractor 中,如何处理重复的内容,比如一张表格?例如,给定以下代码,它会踢出一个包含 3 列的表:Index , Name和 Delete-Button在每一行中: {{$in
我为 Protractor 编写了一个自定义定位器,可以找到 anchor元素由他们 ui-sref值(value)。在我的规范中,我刚刚使用了 by.addLocator添加自定义定位器,但我认为发
我遇到过 Protractor 的页面对象的不同类型的语法,我想知道它们的背景是什么以及建议采用哪种方式。 这是 Protractor 教程中的官方 PageObject 语法。我最喜欢它,因为它清晰
Protractor 中有两个 it() 测试用例 it('it1',function(){ }); it('it2',function(){ }); 完成 it1 后, Protractor 中的驱
我目前正在运行一套 Protractor 测试。我有一个 config.js 仅设置为运行具有“功能”的 Chrome。见下文。 capabilities: { } browserNa
我试图断言名称显示在表的列中。我写了一个 inResults将遍历列的文本以查看名称是否存在的函数。这是我正在尝试的: 页面对象: this.names = element.all(by.repeat
我可以使用检索浏览器日志 browser.manage().logs().get('browser').then(function(browserLog) { logger.info('log:
我按照文档中有关如何安装 Protractor 和 Selenium 的说明进行操作,但无法启动。 install -g protractor webdriver-manager update 之后我
我在 Protractor 中使用 --suites config 运行多个案例。我必须为每种情况重新启动我的 web 应用程序,但我的应用程序有一个警报,每当页面重新加载或关闭时,都会弹出该警报以进
我想知道如何在测试套件中按顺序运行测试用例。 例如,加载 URL、登录系统等。 最佳答案 检查 protractor.conf.js example . 您可以指定一个按字母顺序加载文件的 glob,
row1Col1 row1Col2 row1Co
如何从包含特定文本的转发器中搜索元素? 我试过这样的事情: element(by.repeater('item in array')).all(by.cssContainingText('.xyz',
只是想知道是否可以将 cli args 指定为 Protractor --multiCapabilities.0.browserName chrome --multiCapabilities.1.br
是否可以在 Protractor 中的任何套件运行之前运行一些测试或逻辑流程? 例如,我想将我的 Protractor 测试分解成一系列套件来测试我的应用程序的不同方面。假设 Jenkins 将在部署
我是 Protractor 的新手,我正在尝试使用 Protractor 设置单选按钮值。我在互联网和 SO 上搜索了徒劳的答案。 html: No Yes
我是一名优秀的程序员,十分优秀!