使用具有phantomjs的量角器js时选择隐藏元素

时间:2014-01-14 16:01:46

标签: angularjs phantomjs protractor

在我最近的一篇文章中,我遇到了hideen元素的问题(参见Here)。从那时起,我已经从chrome驱动程序转移到phantomjs进行无头测试。

我的问题是这个。

由于选择隐藏元素的移动导致下面的错误

  

UnknownError:错误消息=> ''undefined'不是一个函数(评估'arguments [0] .click()')'

在chrome(webdriver)中运行很好并且所有测试都通过但是phantomjs似乎不喜欢这种方法。是否存在使用phantomjsprotractorjs在测试中运行的此问题的另一种方法。

修改 以下测试是我遇到的问题

it('should redirect to addresses', function () {
        var hiddenWebElement = ptor.driver.findElement(by.css('ul#myaccount li:nth-child(2) a'));
        ptor.driver.executeScript("arguments[0].click()",hiddenWebElement).then(function() {
            expect(ptor.driver.getCurrentUrl()).toContain('#/addresses');
        });
    }, 15000);

我的配置文件是

// An example configuration file.
exports.config = {
    // The address of a running selenium server.
    seleniumAddress: 'http://localhost:4444/wd/hub',
    baseUrl: 'http://localhost:52254',
    // Capabilities to be passed to the webdriver instance.
    capabilities: {
        'browserName': 'phantomjs'
    },

    // Spec patterns are relative to the current working directly when
    // protractor is called.
    specs: [
        'Scenarios/account_spec.js',
        'Scenarios/add_address_spec.js'
    ],

    // Options to be passed to Jasmine-node.
    jasmineNodeOpts: {
        showColors: true,
        defaultTimeoutInterval: 30000
    }
};

需要注意的是,在此次运行之上的所有测试都会产生下面的测试,在尝试查找元素时再次出现问题

it('should redirect to login', function () {
        ptor.driver.findElement(by.id('headerLoginBtn')).click().then(function () {
            expect(ptor.driver.getCurrentUrl()).toContain('/Account/Login');
        });
    }, 15000);
抛出元素异常的

是不可见的。此场景中的测试也使用ptor.driver,因为页面包含c#ASP.NET代码。

1 个答案:

答案 0 :(得分:0)

我找到了一种对我来说唯一可能的解决方法。我删除了隐藏元素的CSS,然后点击它,它工作。我正在使用硒,但它应该是类似的解决方案

    executeJavaScript("$('.log-out').removeClass('hide');");
    driver.findElement(By.className("log-out")).click();