[英]No specs found while running protractor
步驟: 1.protractor .\\conf\\conf.js
開/關:
> PS D:\CHOR-3823\LatestAutomation\PROJECTS\EVAutomation> protractor .\conf\conf.js
[18:12:11] I/launcher - Running 1 instances of WebDriver
[18:12:11] I/direct - Using ChromeDriver directly...
DevTools listening on ws://127.0.0.1:53625/devtools/browser/6885cfd9-3e30-42c9-b866-cbc7a01db67d
[29324:12112:0828/181212.692:ERROR:device_event_log_impl.cc(208)] [18:12:12.693] Bluetooth: bluetooth_adapter_winrt.cc:1164 RequestRadioAccessAsync failed: RadioAccessStatus::DeniedByUserWill not be able to change radio power.
User Name Locator is : //input[@placeholder='Username']
User Pass Locator is : //input[@placeholder='Password']
User Sign IN Locator is : Sign In
Started
Suite started: Login test whose full description is: Login test
Suitename is:Login test
directory created..
suitename is:login
Directory path is:logs\2020\8\28\Login test\login_20200828124213.log
Log Folder Link : ftp:\1.1.1.8\mnt.\logs\2020\8\28\Login test\login_20200828124213.log
myLogger....
No specs found
Finished in 0.009 seconds
priting json data....
Email report<html.html> saved successfully..
[18:12:13] I/launcher - 0 instance(s) of WebDriver still running
注意:-它說沒有找到規格。 但實際上它進入了規范並且它正在從規范文件使用的頁面目錄中打印一些消息。但是它無法調用該頁面文件的任何方法,然后它就退出執行並說沒有發現任何問題。
請找到 conf.js 代碼:
require("@babel/register")({
presets: ["@babel/preset-env"],
plugins: [["@babel/transform-runtime"]]
});
var jasmineReporters = require("jasmine-reporters");
var htmlReporter = require("protractor-html-reporter-2");
var jasmineSpecReporter = require("jasmine-spec-reporter");
var screenshots = require('protractor-take-screenshots-on-demand');
var fs = require("fs-extra");
var nodemailer = require("nodemailer");
var EmailTemplate = require("email-templates").EmailTemplate;
const Logger = require("../utils/logger.js");
var ejs = require("ejs");
var fs = require("fs");
var xml2js = require("xml2js");
exports.config = {
framework: "jasmine",
directConnect: true,
// suites: {
//loginswilite : "src/testcases/sweliteLogin/*.js"
//DeviceSWeLite : "src/testcases/Devicelogin/*.js"
//DevicePageGUI : "src/testcases/DeviceGUI/*.js"
//RebootDevice: "src/testcases/Rebootdevice/*.js"
//Run_Health_Report : "src/testcases/HealthReport/*.js"
//Delete_Undelete_Device : "src/testcases/DeleteAndUndelete/*.js"
//Backup_and_Restore_Config : "src/testcases/BackupAndRestore_Config/*.js"
// login_spec :"../tests/login_spec/*.js"
//Bulk_Add_user : "src/testcases/BulkAdduser/*.js"
//login: ["src/testcases/login/*.js","src/testcases/Add_collection_move_device/*.js"]
//sanity: ["src/testcases/login/*.js", "src/testcases/collection/*.js"]
//src/testcases/DeleteAndUndelete/*.js
specs: [
'D:\\CHOR-3823\\LatestAutomation\\PROJECTS\\EVAutomation\\tests\\login_spec.js'
],
// },
SELENIUM_PROMISE_MANAGER: false,
capabilities: {
//browserName: "firefox",
//acceptInsecureCerts: true,
browserName: "chrome",
chromeOptions: {
args: ["--start-maximized", "--ignore-certificate-errors"]
}
},
// Options to be passed to Jasmine-node.
jasmineNodeOpts: {
onComplete: null,
// If true, display spec names.
isVerbose: false,
// If true, print colors to the terminal.
showColors: true,
// If true, include stack traces in failures.
includeStackTrace: true,
// Default time to wait in ms before a test fails.
defaultTimeoutInterval: 1200000
},
onPrepare: function () {
"use strict";
browser.ignoreSynchronization = true;
// jasmine.getEnv().addReporter(new HtmlReporter({
// baseDirectory: 'reports'
// }).getJasmine2Reporter());
browser.timeStamp = new Date()
.toISOString()
.replace(/T/, "") // replace T with a space
.replace(/\..+/, "")
.split("-")
.join("")
.split(":")
.join("");
jasmine.getEnv().addReporter(
new jasmineReporters.JUnitXmlReporter({
consolidateAll: true,
savePath: "./reports/xml",
filePrefix: "xmlresults"
})
);
screenshots.browserNameJoiner = ' - ';
screenshots.screenShotDirectory = 'target/screenshots';
screenshots.createDirectory();
jasmine.getEnv().addReporter({
suiteStarted: function (result) {
browser.suiteName = result.fullName;
console.log(
"Suite started: " +
result.description +
" whose full description is: " +
result.fullName
);
},
specStarted: function (result) {
//Logger initialiation for test case
browser.testcaseName = result.description;
browser.logger = new Logger();
browser.logDir = browser.logger.getLogDir();
browser.logFolderLink = browser.logger.getLogFolderLink();
},
specDone: function (result) {
console.log("Test Completed:" + result.fullName);
if (result.status == "failed") {
browser.logger.result(result.status.toUpperCase());
result.failedExpectations.forEach(element => {
browser.logger.error(element.stack);
});
}
browser.logger.result(result.status);
browser.getCapabilities().then(function (caps) {
var browserName = caps.get("browserName");
browser.takeScreenshot().then(function (png) {
var stream = fs.createWriteStream(
"./reports/" +
browserName +
"/screenshots/" +
browserName +
"-" +
result.fullName +
".png"
);
stream.write(Buffer.from(png, "base64"));
stream.end();
});
});
}
});
},
onComplete: function () {
var browserName, browserVersion;
var capsPromise = browser.getCapabilities();
capsPromise.then(function (caps) {
browserName = caps.get("browserName");
browserVersion = caps.get("version");
platform = caps.get("platform");
testConfig = {
reportTitle: "Protractor Test Execution Report",
outputPath: "./reports/",
outputFilename: "ProtractorTestReport",
screenshotPath: browserName + "/screenshots",
testBrowser: browserName,
browserVersion: browserVersion,
modifiedSuiteName: false,
screenshotsOnlyOnFailure: false,
testPlatform: platform
};
new htmlReporter().from("./reports/xml/xmlresults.xml", testConfig);
});
var parser = new xml2js.Parser({ mergeAttrs: true, explicitArray: false });
var jsonData = "";
var myresult;
var xmlData = fs.readFileSync("./reports/xml/xmlresults.xml", "utf8");
my_data = parser.parseString(xmlData, function (err, result) {
console.log("priting json data....");
//jsonData = JSON.stringify(result);
myresult = result;
});
var htmlContent = fs.readFileSync("./reports/template.ejs", "utf8");
var htmlRenderized = ejs.render(htmlContent, {
filename: "./reports/template.ejs",
jsonobject: myresult,
timestamp: browser.timeStamp,
logDir: browser.logDir
});
//console.log(htmlRenderized);
fs.writeFile("./reports/html.html", htmlRenderized, function (err) {
if (err) return console.log(err);
console.log("Email report<html.html> saved successfully.. ");
});
}
};
請找到 login_spec.js 的內容:
let inputPara = require('../object_repository/inputPageOR.json')
let loginpage = require('../pages/loginpage')
let Logger = require('../utils/logger.js')
describe('Login test', function () {
/* "use strict";
let logger;
beforeEach(function () {
logger = new Logger();
logger.setcurrentFile(__filename);
logger.info("Testcase :" + " " + browser.testcaseName + " " + "started");
logger.info(browser.logger.getLogDir() + "/" + browser.suiteName + "/" + browser.testcaseName + "/" + browser.timeStamp + '.' + 'log');
logger.info(browser.logger.getLogFolderLink() + "/" + browser.suiteName + "/" + browser.testcaseName + "/" + browser.timeStamp + '.' + 'log');
logger.info("Before Each: Opening Login Page");
}); */
it('login', function () {
let url = inputPara.openPage.url;
let userName = inputPara.login.username;
let password = inputPara.login.password;
// browser.waitForAngularEnabled(false);
// logger.info("opening EV GUI");
loginpage.get(url.toString());
loginpage.userName(userName.toString());
loginpage.userPassword(password.toString());
loginpage.buttonClick();
browser.sleep(2000)
});
});
請找到loginpage文件的內容:
let objRepo = require("../object_repository/commonPageOR.json");
let loginpage = function () {
//Fetching data from Json file for Locator
let uname= objRepo.loginPageValue.usernameInput
let upass= objRepo.loginPageValue.passwordInput
let uclick= objRepo.loginPageValue.submitButton
console.log("User Name Locator is : " + uname);
console.log("User Pass Locator is : " + upass);
console.log("User Sign IN Locator is : " + uclick);
let userName_input = element(by.xpath(uname.toString()));
let userPassword_input = element(by.xpath(upass.toString()));
let signInbutton = element(by.partialButtonText(uclick.toString()));
this.get = function (url) {
try{
browser.get(url);
}
catch(err){
console.log(err.stack());
}
}
this.userName = function (userName) {
try{
userName_input.clear();
userName_input.sendKeys(userName);
}
catch(err){
console.log(err.stack());
}
}
this.userPassword = function (password) {
try{
userPassword_input.clear();
userPassword_input.sendKeys(password);
}
catch(err){
console.log(err.stack());
}
}
this.buttonClick = function () {
try{
signInbutton.click();
}
catch(err){
console.log(err.stack());
}
}
}
module.exports = new loginpage();
請找到目錄結構:
對我來說,這似乎是配置文件中的規格有問題
specs: [
'D:\\CHOR-3823\\LatestAutomation\\PROJECTS\\EVAutomation\\tests\\login_spec.js'
],
嘗試給出相對路徑,如
specs: [
'../tests/login_spec/js'
],
那應該工作
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.