PhantomJS无法找到Element

时间:2015-12-04 13:23:13

标签: angularjs phantomjs protractor

我已经定义了一个测试订单来自商店的产品。在流程结束时,您将被重定向到支付提供商(paypal或其他)以支付您的订单。 问题出在这里:商店是基于角度但不是支付页面。测试一直在运行,直到我进入付款页面。然后我收到:

Failed: {"errorMessage":"Unable to find element with xpath '//*[@id=\"cardnumber\"]'

代码是这样的:

 it('submit the order', function () {
        CO4.order();
        browser.sleep(8000);
    });

    it('enters the creditcard data', function () {
        browser.driver.findElement(by.xpath('//*[@id="cardnumber"]')).sendKeys("123456789");
        browser.driver.findElement(by.xpath('//*[@id="expmonth"]')).sendKeys("12");
        browser.driver.findElement(by.xpath('//*[@id="expyear"]')).sendKeys("2050");
        browser.driver.findElement(by.xpath('//*[@id="cvm"]')).sendKeys("123");
        browser.driver.findElement(by.xpath('//*[@id="next"]')).click();
    });

配置为:

var TIMEOUT = 40000;
exports.config = {
    seleniumServerJar: '../../selenium/selenium-server-standalone-2.48.2.jar',
    baseUrl: 'https://myShop/main',

    specs: [
        './UseCases/protractorSuiteCheckout.js',
    ],

    capabilities: {
        'browserName': 'PhantomJS'.toLowerCase(),
        'phantomjs.binary.path': require('phantomjs').path,
        'phantomjs.cli.args': ['--ignore-ssl-errors=true', '--web-security=false'],
        'phantomjs.ghostdriver.cli.args': ['--loglevel=DEBUG']
    },

    getPageTimeout: TIMEOUT,
    allScriptsTimeout: TIMEOUT,
    jasmineNodeOpts: {
        defaultTimeoutInterval: TIMEOUT,
        isVerbose: true,
        includeStackTrace: true
    },
    framework: "jasmine2",
    onPrepare: function () {
        browser.driver.manage().window().maximize();
        browser.driver.manage().deleteAllCookies();
        var jasmineReporters = require('jasmine-reporters');
        jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter({
            consolidateAll: true,
            filePrefix: 'xmloutput',
            savePath: 'report'
        }));
}

};

请帮忙!

1 个答案:

答案 0 :(得分:1)

为什么使用复杂的xpath,你所做的只是一个findById?

替换

   browser.driver.findElement(by.xpath('//*[@id="cardnumber"]')).sendKeys("123456789");
    browser.driver.findElement(by.xpath('//*[@id="expmonth"]')).sendKeys("12");
    browser.driver.findElement(by.xpath('//*[@id="expyear"]')).sendKeys("2050");
    browser.driver.findElement(by.xpath('//*[@id="cvm"]')).sendKeys("123");
    browser.driver.findElement(by.xpath('//*[@id="next"]')).click();

by:

        browser.driver.findElement(by.id('cardnumber')).sendKeys("123456789");
        browser.driver.findElement(by.id('expmonth')).sendKeys("12");
        browser.driver.findElement(by.id('expyear')).sendKeys("2050");
        browser.driver.findElement(by.id('cvm')).sendKeys("123");
        browser.driver.findElement(by.id('next')).click();

看看它是否更好?