量角器测试用例在Jenkins服务器上失败,但它们传递本地计算机:错误:元素无法点击

时间:2014-10-24 09:58:53

标签: javascript angularjs protractor

我写的是脚本,我在其中创建一个表单,然后删除它。当创建和删除一个模态对话框出现在屏幕上时,"创建" &安培; "删除"莫代尔对话中出现了按钮。当我在本地机器上执行此脚本时,测试脚本运行正常,但是当我在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 &amp;&amp; 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);
};

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。

在测试用例中进行一些更改后,测试用例现在可以正常运行jenkins。我认为问题是,一旦焦点位于页面的底部,它不会自动点击元素,我重新构建测试用例,使我的列表不会太长,焦点不会去在页面的底部。另外,我通过在beforeEach函数中使用下面的代码行重置每个测试用例之前的窗口大小:

beforeEach(function () {
    ptor.ignoreSynchronization = true;
    browser.driver.manage().window().setSize(1280, 1024);
});

我不确定我的假设是否正确,解决方案对每个人都有效,但对我来说工作正常。你可能想尝试看看。