我写的是脚本,我在其中创建一个表单,然后删除它。当创建和删除一个模态对话框出现在屏幕上时,"创建" &安培; "删除"莫代尔对话中出现了按钮。当我在本地机器上执行此脚本时,测试脚本运行正常,但是当我在Jenkins服务器上运行相同时,测试脚本将失败并显示以下消息:
[31mUnknownError: unknown error: Element is not clickable at point (370, 24). Other element would receive the click: <div class="modal-backdrop fade" ng-class="{in: animate}" ng-style="{'z-index': 1040 + (index && 1 || 0) + index*10}" modal-backdrop="" style="z-index: 1031;"></div>
(Session info: chrome=37.0.2062.124)
(Driver info: chromedriver=2.9.248315,platform=Windows NT 6.1 SP1 x86_64)[0m
这是我的测试脚本:
describe('Tests Scripts', function () {
var baseurl = `"http://test/index.html"`;
var url = `"/index.html"`;
var driver = browser.driver;
var ptor = protractor.getInstance();
var tabIndex = 1;
beforeEach(function () {
ptor.ignoreSynchronization = true;
});
it('WILL load the page', function () {
browser.get(baseurl);
helper.waitForElementByXpath('//*[@id="xyz"]/ul/li/a/i');
expect(browser.driver.isElementPresent(by.xpath('//*[@id="xyz"]/ul/li/a/i'))).toBeTruthy();
expect(browser.getCurrentUrl()).toContain(url);
});
it('Delete the form', function () {
element(by.xpath('//*[@id="xyz"]/ul/li/a/i')).click().then(() => {
helper.waitForElementById('controlItem');
element(by.id('controlItem')).click().then(()=> {
helper.waitForElementById('modalDialogue');
var form_name = "DeleteForm";
element(by.id('title')).sendKeys(form_name);
browser.wait(function () {
helper.clickByIDAndWait('createbutton');
tabIndex++;
return true;
}, 5000).then(function () {
browser.getCurrentUrl().then(function (curr_url) {
var arr_url = curr_url.split(':');
var instance_id = arr_url[arr_url.length - 1];
helper.clickByXpathAndWait('//*[@id="windowTab-1"]/a');
helper.waitForElementById('form-control');
var xp = '//*[@id="Forms-' + instance_id + '"]/td[2]';
expect(driver.isElementPresent(by.xpath(xp))).toBeTruthy();
element(by.id('deleteForm-' + instance_id)).click().then(()=> {
helper.waitForElementById('DeleteFormModal');
browser.wait(function () {
helper.clickByIDAndWait('modal-deleteForm-btn');
return true;
}, 5000).then(function () {
helper.waitForElementById(form-control');
expect(driver.isElementPresent(by.xpath(xp))).toBeFalsy();
});
});
});
});
});
以下是上述代码中使用的函数:
var clickByIDAndWait = function (btnId) {
var returnVal = false;
browser.wait(function () {
if (!returnVal) {
element(by.id(btnId)).click().then(function () {
returnVal = true;
});
}
return returnVal;
}, 30000);
};
var waitForElementById = function(elementId){
browser.wait(function(){
return browser.driver.isElementPresent(by.id(elementId));
},30000);
};
答案 0 :(得分:0)
我找到了解决方案。
在测试用例中进行一些更改后,测试用例现在可以正常运行jenkins。我认为问题是,一旦焦点位于页面的底部,它不会自动点击元素,我重新构建测试用例,使我的列表不会太长,焦点不会去在页面的底部。另外,我通过在beforeEach函数中使用下面的代码行重置每个测试用例之前的窗口大小:
beforeEach(function () {
ptor.ignoreSynchronization = true;
browser.driver.manage().window().setSize(1280, 1024);
});
我不确定我的假设是否正确,解决方案对每个人都有效,但对我来说工作正常。你可能想尝试看看。