ক্যাস্পারজেএস ডকুমেন্টেশন অনুসারে :
then()
স্বাক্ষর: then(Function then)
একটি সহজ ফাংশন সরবরাহ করে এই পদ্ধতিটি স্ট্যাকটিতে একটি নতুন নেভিগেশন পদক্ষেপ যুক্ত করার মানক উপায়:
casper.start('http://google.fr/');
casper.then(function() {
this.echo('I\'m in your google.');
});
casper.then(function() {
this.echo('Now, let me write something');
});
casper.then(function() {
this.echo('Oh well.');
});
casper.run();
আপনি প্রয়োজন হিসাবে অনেক পদক্ষেপ যোগ করতে পারেন। নোট করুন যে বর্তমান Casperউদাহরণটি স্বয়ংক্রিয়ভাবে thisআপনার জন্য পদক্ষেপ ফাংশনের মধ্যে কীওয়ার্ডকে আবদ্ধ করে ।
আপনার নির্ধারিত সমস্ত পদক্ষেপগুলি চালনার জন্য, run()পদ্ধতিটি কল করুন এবং ভয়েলা।
দ্রষ্টব্য: পদ্ধতিটি start()ব্যবহার করার জন্য আপনাকে অবশ্যই ক্যাস্পার দৃষ্টান্তটি আবশ্যক then()।
সতর্কতা:then() দুটি পদক্ষেপে যুক্ত পদক্ষেপ ফাংশনগুলি প্রক্রিয়াজাত করা হয়:
- যখন আগের পদক্ষেপটি কার্যকর করা হয়েছে,
- যখন পূর্বের প্রধান এইচটিটিপি অনুরোধ কার্যকর করা হয়েছে এবং পৃষ্ঠাটি লোড হয়েছে ;
নোট করুন যে পৃষ্ঠাটি লোডের কোনও একক সংজ্ঞা নেই ; এটি কি যখন DOMReady ইভেন্টটি ট্রিগার করা হয়েছিল? এটি কি "সমস্ত অনুরোধগুলি শেষ হচ্ছে"? এটি কি "সমস্ত অ্যাপ্লিকেশন যুক্তি সম্পাদন করা হচ্ছে"? বা "সমস্ত উপাদান রেন্ডার হচ্ছে"? উত্তর সর্বদা প্রসঙ্গে নির্ভর করে। সুতরাং আপনি কী waitFor()আশা করেন তার উপর সুস্পষ্ট নিয়ন্ত্রণ রাখতে সর্বদা পারিবারিক পদ্ধতিগুলি ব্যবহার করতে উত্সাহিত হন কেন ।
একটি সাধারণ কৌশলটি হ'ল waitForSelector():
casper.start('http://my.website.com/');
casper.waitForSelector('#plop', function() {
this.echo('I\'m sure #plop is available in the DOM');
});
casper.run();
পর্দার আড়ালে, এর উত্স কোডটিCasper.prototype.then নীচে দেখানো হয়েছে:
Casper.prototype.then = function then(step) {
"use strict";
this.checkStarted();
if (!utils.isFunction(step)) {
throw new CasperError("You can only define a step as a function");
}
if (this.checker === null) {
step.level = 0;
this.steps.push(step);
} else {
try {
step.level = this.steps[this.step - 1].level + 1;
} catch (e) {
step.level = 0;
}
var insertIndex = this.step;
while (this.steps[insertIndex] && step.level === this.steps[insertIndex].level) {
insertIndex++;
}
this.steps.splice(insertIndex, 0, step);
}
this.emit('step.added', step);
return this;
};
ব্যাখ্যা:
অন্য কথায়, then()নেভিগেশন প্রক্রিয়ার পরবর্তী পদক্ষেপের সময়সূচী।
যখন then()ডাকা হয়, এটি একটি পরামিতি হিসাবে একটি ফাংশন পাস যা একটি পদক্ষেপ হিসাবে ডাকা হয়।
এটি উদাহরণস্বরূপ শুরু হয়েছে কিনা তা পরীক্ষা করে এবং এটি না থাকলে এটি নিম্নলিখিত ত্রুটিটি প্রদর্শন করে:
CasperError: Casper is not started, can't execute `then()`.
এরপরে, এটি পরীক্ষা করে যদি pageবস্তুটি হয় কিনা null।
যদি শর্তটি সত্য হয় তবে ক্যাস্পার একটি নতুন pageঅবজেক্ট তৈরি করে ।
এর পরে, প্যারামিটারটি then()যাচাই করে stepএটি পরীক্ষা করে না যে এটি কোনও ফাংশন নয়।
যদি প্যারামিটারটি কোনও ফাংশন না হয় তবে এটি নিম্নলিখিত ত্রুটিটি দেখায়:
CasperError: You can only define a step as a function
তারপরে, ফাংশনটি ক্যাস্পার চলছে কিনা তা পরীক্ষা করে।
যদি ক্যাস্পার চলমান না থাকে তবে then()সারিটির শেষের ধাপটি যুক্ত করে।
অন্যথায়, যদি ক্যাস্পার চলমান থাকে তবে এটি একটি সাবসেটপটি পূর্বের ধাপের চেয়ে গভীরতর স্তর সন্নিবেশ করায়।
অবশেষে, then()একটি step.addedইভেন্ট নির্গত করে ফাংশনটি সমাপ্ত হয় এবং ক্যাস্পার অবজেক্টটি প্রদান করে।
flowক্যাস্পারজসের জেনারেলের একটি ব্যাখ্যা খুঁজছি , তবে আমি আবিষ্কার করেছি যে আপনি মূলত কোনওevaluateকলের মধ্যে থেকে ক্যাস্পারকে উল্লেখ করতে পারবেন না । (যেমন আপনি কোনও নতুন ইউআরএল, লগ, ইকো ইত্যাদি খুলতে পারবেন না)। সুতরাং আমার ক্ষেত্রে মূল্যায়ন বলা হয়েছিল কিন্তু বাইরের বিশ্বের সাথে যোগাযোগের কোনও উপায় নেই।