我已经定义了一个测试订单来自商店的产品。在流程结束时,您将被重定向到支付提供商(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'
}));
}
};
请帮忙!
答案 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();
看看它是否更好?