পছন্দসই সেলেনিয়াম সহ ব্রাউজারে এক্সটক্স কোড পরীক্ষার জন্য কোনও পরামর্শ?


92

আমরা উচ্চ-স্তরের ওয়েবসাইট টেস্টিং পরিচালনা করার জন্য দুর্দান্ত সাফল্যের সাথে সেলেনিয়াম ব্যবহার করে আসছি (মডিউল স্তরে বিস্তৃত পাইথন ডেস্কটেট ছাড়াও)। তবে এখন আমরা প্রচুর পৃষ্ঠাগুলির জন্য এক্সট্রা ব্যবহার করছি এবং গ্রিডের মতো জটিল উপাদানগুলির জন্য সেলেনিয়াম পরীক্ষা অন্তর্ভুক্ত করা কঠিন প্রমাণ করে।

এক্সট্রাভ-ভিত্তিক ওয়েব পৃষ্ঠাগুলির জন্য কারও কি স্বয়ংক্রিয় পরীক্ষাগুলি লিখে সাফল্য এসেছে? প্রচুর গুগলিং একই ধরণের সমস্যাযুক্ত লোকদের খুঁজে পায় তবে কয়েকটি উত্তর। ধন্যবাদ!


এক্সট্রা জেএস-এ থাকা ভাল লোকেরা এখানে তাদের ব্লগে এই বিষয়টি পোস্ট করার জন্য যথেষ্ট সদয় হয়েছে । আশা করি এটা কাজে লাগবে.
এনবিআরড

উত্তর:


173

সেলেনিয়ামের সাথে এক্সটজেএস পরীক্ষার ক্ষেত্রে সবচেয়ে বড় প্রতিবন্ধকতা হ'ল এক্সটজেএস স্ট্যান্ডার্ড এইচটিএমএল উপাদানগুলি সরবরাহ করে না এবং সেলেনিয়াম আইডিই নির্বিকারভাবে (এবং যথাযথভাবে) সুনির্দিষ্ট হিসাবে কাজ করে এমন উপাদানগুলিতে লক্ষ্যযুক্ত কমান্ড তৈরি করবে - অতিরিক্ত ডায়ালিউড উপাদানগুলি যা এক্সপ্লোর পরিচালনা ডেস্কটপের সাহায্যে এক্সট্রজকে সহায়তা করে- চেহারা এবং অনুভূতি। একটি এক্সজেএস অ্যাপের বিরুদ্ধে স্বয়ংক্রিয় সেলেনিয়াম পরীক্ষা লেখার সময় আমি এখানে কয়েকটি টিপস এবং কৌশলগুলি সংগ্রহ করেছি।

সাধারণ টিপস

উপাদানসমূহ সনাক্ত করা হচ্ছে

ফায়ারফক্সে সেলেনিয়াম আইডিই দিয়ে ব্যবহারকারী ক্রিয়া রেকর্ড করে সেলেনিয়াম পরীক্ষার কেসগুলি তৈরি করার সময়, সেলেনিয়াম এইচটিএমএল উপাদানগুলির আইডিতে রেকর্ডকৃত ক্রিয়াকলাপগুলিকে বেস করবে। তবে, বেশিরভাগ ক্লিকযোগ্য উপাদানগুলির জন্য, এক্স্টজেএস "এক্সটেন-জেন -345" এর মতো উত্পন্ন আইডির ব্যবহার করে যা পরবর্তী পৃষ্ঠায় পরবর্তী কোনও সফরে পরিবর্তন হতে পারে এমনকি কোনও কোড পরিবর্তন না করা হলেও। পরীক্ষার জন্য ব্যবহারকারীর ক্রিয়া রেকর্ড করার পরে, উত্পন্ন আইডির উপর নির্ভরশীল এবং তাদের প্রতিস্থাপনের জন্য এই জাতীয় সমস্ত ক্রিয়াগুলির মধ্য দিয়ে যাওয়ার জন্য একটি ম্যানুয়াল প্রচেষ্টা দরকার। দুটি ধরণের প্রতিস্থাপন করা যেতে পারে:

একটি আইডি লোকের পরিবর্তে একটি সিএসএস বা এক্সপথ লোকেটার দিয়ে

সিএসএস লোকেটারগুলি "সিএসএস =" দিয়ে শুরু হয় এবং এক্সপথ লোকেটারগুলি "//" দিয়ে শুরু হয় ("xpath =" উপসর্গটি isচ্ছিক)। সিএসএস লোকেটারগুলি কম ভার্বোস এবং পড়া সহজ এবং এক্সপথ লোকেটারের চেয়ে বেশি পছন্দ করা উচিত। তবে, এমন কিছু ক্ষেত্রে থাকতে পারে যেখানে এক্সপথ লোকেটারগুলি ব্যবহার করা দরকার কারণ কোনও সিএসএস লোকেটর কেবল এটি কাটতে পারে না।

জাভাস্ক্রিপ্ট কার্যকর করা হচ্ছে

কিছু উপাদানগুলিকে এক্সটজেএস দ্বারা পরিচালিত জটিল রেন্ডারিংয়ের কারণে সাধারণ মাউস / কীবোর্ড ইন্টারঅ্যাকশনগুলির চেয়ে বেশি প্রয়োজন। উদাহরণস্বরূপ, একটি এক্সট্রাফর্ম.কোম্ববক্স আসলে কোনও <select>উপাদান নয় তবে ডকুমেন্ট গাছের নীচে যে কোনও জায়গায় বিচ্ছিন্ন ড্রপ-ডাউন তালিকার একটি পাঠ্য ইনপুট। কম্বোবক্স নির্বাচনটি সঠিকভাবে অনুকরণ করার জন্য, প্রথমে ড্রপ-ডাউন তীরের উপর ক্লিক ক্লিক করে তারপরে প্রদর্শিত তালিকাতে ক্লিক করা সম্ভব। যাইহোক, সিএসএস বা এক্সপথ লোকেটারগুলির মাধ্যমে এই উপাদানগুলি সনাক্ত করা জটিল হতে পারে। বিকল্পটি হ'ল কমোবক্স উপাদানটি নিজেই সনাক্ত করা এবং নির্বাচনের অনুকরণ করার জন্য এটিতে পদ্ধতিগুলি কল করা:

var combo = Ext.getCmp('genderComboBox'); // returns the ComboBox components
combo.setValue('female'); // set the value
combo.fireEvent('select'); // because setValue() doesn't trigger the event

সেলেনিয়ামে runScriptকমান্ডটি আরও সংক্ষিপ্ত আকারে উপরের ক্রিয়াকলাপটি সম্পাদন করতে ব্যবহার করা যেতে পারে:

with (Ext.getCmp('genderComboBox')) { setValue('female'); fireEvent('select'); }

এজেএক্স এবং স্লো রেন্ডারিংয়ের সাথে মোকাবিলা করা

কোনও ব্যবহারকারী অ্যাকশন পৃষ্ঠার স্থানান্তর বা পুনরায় লোডের ফলশ্রুতিতে ফলাফলের জন্য পৃষ্ঠা লোডের জন্য অপেক্ষা করার জন্য সমস্ত কমান্ডের জন্য সেলেনিয়ামের "* অ্যান্ডওয়াইট" স্বাদ রয়েছে। তবে, যেহেতু এএএএক্সএক্স সংগ্রহগুলি প্রকৃত পৃষ্ঠার বোঝা জড়িত না, তাই এই আদেশগুলি সিঙ্ক্রোনাইজেশনের জন্য ব্যবহার করা যাবে না। সমাধানটি হল এজেএক্স প্রগতি সূচকের উপস্থিতি / অনুপস্থিতি বা গ্রিডে সারিগুলির উপস্থিতি, অতিরিক্ত উপাদান, লিঙ্ক ইত্যাদির মতো ভিজ্যুয়াল ক্লুগুলি ব্যবহার করা উদাহরণস্বরূপ:

Command: waitForElementNotPresent
Target: css=div:contains('Loading...')

কখনও কখনও কোনও উপাদান কোনও নির্দিষ্ট সময়ের পরে উপস্থিত হয়, নির্ভর করে একজন ব্যবহারকারী ক্রিয়াকলাপের পরে দৃশ্যের পরিবর্তনের ফলে এক্সটজেএস কীভাবে উপাদানগুলি সরবরাহ করে on pauseকমান্ডটি দিয়ে সালিশি বিলম্বের পরিবর্তে , আদর্শ পদ্ধতি হ'ল আগ্রহের উপাদানটি আমাদের উপলব্ধি না হওয়া পর্যন্ত অপেক্ষা করা উচিত। উদাহরণস্বরূপ, কোনও আইটেম উপস্থিত হওয়ার জন্য অপেক্ষা করার পরে এটি ক্লিক করতে:

Command: waitForElementPresent
Target: css=span:contains('Do the funky thing')
Command: click
Target: css=span:contains('Do the funky thing')

বিভিন্ন ব্রাউজারে বা বিভিন্ন মেশিনে পরীক্ষা চালানোর ফলে সময়ের পার্থক্যের কারণে নির্বিচার বিরতিগুলির উপর নির্ভর করা ভাল ধারণা নয় কারণ পরীক্ষার কেসগুলি দুর্বল করে তুলবে।

অ-ক্লিকযোগ্য আইটেম

clickকমান্ড দ্বারা কিছু উপাদান ট্রিগার করা যায় না । এর কারণ ইভেন্ট শ্রোতা আসলে ধারক স্থানে থাকে এবং তার শিশু উপাদানগুলির উপর মাউস ইভেন্টগুলি পর্যবেক্ষণ করে, যা শেষ পর্যন্ত পিতামাতার কাছে বুদবুদ হয়। ট্যাব নিয়ন্ত্রণ একটি উদাহরণ। একটি ট্যাবে ক্লিক করতে, আপনাকে mouseDownট্যাব লেবেলে একটি ইভেন্টের অনুকরণ করতে হবে :

Command: mouseDownAt
Target: css=.x-tab-strip-text:contains('Options')
Value: 0,0

ক্ষেত্র বৈধকরণ

validationDelayব্যবহারকারীর পাঠ্য প্রবেশ করানোর পরে বা ক্ষেত্রটি হারিয়ে যাওয়ার সাথে সাথেই ফর্ম ক্ষেত্রগুলি (Ext.for। * উপাদান) যাচাইকরণের জন্য নিয়মিত প্রকাশ বা vtyype সম্পর্কিত একটি নির্দিষ্ট বিলম্বের সাথে বৈধতা ( ডিফল্টরূপে 250 মিমি সেট করা সম্পত্তি দেখুন ) প্রবর্তন করবে ফোকাস - বা অস্পষ্টতা ( validateOnDelayসম্পত্তি দেখুন)। ক্ষেত্রের ভিতরে কিছু পাঠ্য সন্নিবেশ করানোর জন্য টাইপ সেলেনিয়াম কমান্ড জারির পরে ক্ষেত্রের বৈধতা যাচাই করার জন্য আপনাকে নিম্নলিখিতগুলির মধ্যে দুটি করতে হবে:

  • বিলম্বিত বৈধতা ট্রিগার করা

    ক্ষেত্রটি কীপ ইভেন্টগুলি গ্রহণ করে যখন এক্সটجيএস বৈধতা বিলম্ব টাইমার বন্ধ করে দেয়। এই টাইমারটি ট্রিগার করতে, কেবল একটি ডামি কীআপ ইভেন্টটি ইস্যু করুন (আপনি কী কী কী কী কী এক্সটজএস এড়িয়ে চলেছেন তা ব্যবহার করে না), তারপরে একটি সংক্ষিপ্ত বিরতি দেওয়া যা বৈধতার চেয়ে বেশি দীর্ঘ:

    Command: keyUp
    Target: someTextArea
    Value: x
    Command: pause
    Target: 500
    
  • তাত্ক্ষণিক বৈধতা ট্রিগার

    তাত্ক্ষণিক বৈধতা ট্রিগার করতে আপনি ক্ষেত্রে একটি অস্পষ্ট ইভেন্ট ইনজেক্ট করতে পারেন:

    Command: runScript
    Target: someComponent.nameTextField.fireEvent("blur")
    

বৈধকরণের ফলাফলগুলি পরীক্ষা করা হচ্ছে

বৈধতা অনুসরণ করে, আপনি একটি ত্রুটি ক্ষেত্রের উপস্থিতি বা অনুপস্থিতি পরীক্ষা করতে পারেন:

Command: verifyElementNotPresent   
Target: //*[@id="nameTextField"]/../*[@class="x-form-invalid-msg" and not(contains(@style, "display: none"))]

Command: verifyElementPresent   
Target: //*[@id="nameTextField"]/../*[@class="x-form-invalid-msg" and not(contains(@style, "display: none"))]

নোট করুন যে "প্রদর্শন: কিছুই নয়" চেক প্রয়োজনীয় কারণ একবার ত্রুটি ক্ষেত্র প্রদর্শিত হয় এবং তারপরে এটি আড়াল করা দরকার, এক্সটجیএস সম্পূর্ণরূপে ডিওএম ট্রি থেকে অপসারণের পরিবর্তে ত্রুটি ক্ষেত্রটি লুকিয়ে রাখবে।

এলিমেন্ট নির্দিষ্ট টিপস

একটি Ext.for.Button ক্লিক করুন

  • বিকল্প 1

    আদেশ: টার্গেট: সিএসএস = বোতামটি ক্লিক করুন: ('সংরক্ষণ করুন')

    বোতামটি এর ক্যাপশন দ্বারা নির্বাচন করে

  • বিকল্প 2

    কমান্ড: টার্গেট: সিএসএস = # সেভ-অপশন বোতামে ক্লিক করুন

    বোতামটি তার আইডি দ্বারা নির্বাচন করে

একটি Ext.for.ComboBox থেকে একটি মান নির্বাচন করা

Command: runScript
Target: with (Ext.getCmp('genderComboBox')) { setValue('female'); fireEvent('select'); }

প্রথমে মান নির্ধারণ করে এবং তারপর পর্যবেক্ষকদের ক্ষেত্রে নির্বাচিত ইভেন্টটিকে স্পষ্টভাবে আগুন ধরিয়ে দেয়।


4
এখানে কয়েকটি ম্যানুয়াল টিপস রয়েছে: rkapse.blogspot.nl/2009/06/selenium-ide-issues-with-extjs.html
ড্যান-ক্লাসন

5

এই ব্লগটি আমাকে অনেক সাহায্য করেছিল। তিনি এই বিষয়ে বেশ লিখেছেন এবং এটি এখনও সক্রিয় বলে মনে হচ্ছে। লোকটি ভাল ডিজাইনের প্রশংসা করে বলে মনে হচ্ছে।

তিনি মূলত আপনার জিজ্ঞাসা করতে জাভাস্ক্রিপ্ট প্রেরণ এবং অভ্যন্তরীণভাবে আপনার এক্স অ্যাপ্লিকেশনটিতে যেমন করেন তেমন জিনিস পুনরুদ্ধার করতে Ext.ComponentQuery.query পদ্ধতি ব্যবহার করার বিষয়ে কথা বলেন। এইভাবে আপনি অক্স্টাইপ এবং আইটেমআইডি ব্যবহার করতে পারেন এবং পাগল স্বতঃ উত্পাদিত স্টাফগুলির যে কোনওটিকে পার্স করার চেষ্টা করার বিষয়ে চিন্তা করতে হবে না।

আমি এই নিবন্ধটি বিশেষভাবে খুব সহায়ক বলে মনে করেছি।

শীঘ্রই এখানে আরও কিছু বিশদ কিছু পোস্ট করা যেতে পারে - এখনও কীভাবে এটি সঠিকভাবে করা যায় তা নিয়ে আমার মাথা পেতে চেষ্টা করা হচ্ছে


4

আমি সেলেনিয়াম দিয়ে আমার এক্সট্রিজ ওয়েব অ্যাপ্লিকেশনটি পরীক্ষা করছি। সবচেয়ে বড় সমস্যা হ'ল গ্রিডে কোনও আইটেম এটি দিয়ে কিছু করার জন্য নির্বাচন করা।

এর জন্য, আমি সহায়ক পদ্ধতি লিখেছিলাম (সেলেনিয়ামএক্সটজস ইউটিস ক্লাসে যা এক্সটজেগুলির সাথে সহজ যোগাযোগের জন্য দরকারী পদ্ধতির সংগ্রহ):

/**
 * Javascript needed to execute in order to select row in the grid
 * 
 * @param gridId Grid id
 * @param rowIndex Index of the row to select
 * @return Javascript to select row
 */
public static String selectGridRow(String gridId, int rowIndex) {
    return "Ext.getCmp('" + gridId + "').getSelectionModel().selectRow(" + rowIndex + ", true)";
}

এবং যখন আমার একটি সারি নির্বাচন করার দরকার ছিল, আমি কেবল কল করব:

selenium.runScript( SeleniumExtJsUtils.selectGridRow("<myGridId>", 5) );

এটি কাজ করার জন্য আমাকে গ্রিডে আমার আইডি সেট করা দরকার এবং এক্সটجےগুলি এটি নিজস্ব তৈরি করতে দেয় না।


আপনার গ্রিডটি এক্সট্রোম্পোন.কিউ.কোয়ারী.একটি টাইপ ব্যবহার করে (আপনি গ্রিড থেকে প্রসারিত করেছেন এবং আপনার নিজের গ্রিডের জন্য xtype সংজ্ঞায়িত করেছেন) ধরে রেখে গ্রিডটি সন্ধান করতে সক্ষম হবেন আমি এই সম্পর্কে কিছু জিনিস রেখেছি। আমি আরও দেখতে পেলাম যে আপনি সারিটির জন্য একটি সনাক্তকারী মান রয়েছে এমন
টিডি

4

উপাদানটি দৃশ্যমান তা সনাক্ত করতে আপনি এই ধারাটি ব্যবহার করেন: not(contains(@style, "display: none")

এটি ব্যবহার করা ভাল:

visible_clause = "not(ancestor::*[contains(@style,'display: none')" +
    " or contains(@style, 'visibility: hidden') " + 
    " or contains(@class,'x-hide-display')])"

hidden_clause = "parent::*[contains(@style,'display: none')" + 
    " or contains(@style, 'visibility: hidden')" + 
    " or contains(@class,'x-hide-display')]"

3

এক্সট্রা পরীক্ষার ক্ষেত্রে আপনি যে ধরণের সমস্যার মুখোমুখি হচ্ছেন সে সম্পর্কে আপনি আরও অন্তর্দৃষ্টি দিতে পারেন?

একটি সেলেনিয়াম এক্সটেনশান যা আমি দরকারী খুঁজে পেল সেটি হল অপেক্ষাফোরকন্ডিশন । যদি আপনার সমস্যাটি অ্যাজাক্স ইভেন্টগুলিতে সমস্যা বলে মনে হয়, তবে ইভেন্টগুলি হওয়ার জন্য অপেক্ষা করার জন্য আপনি ওয়েটফরকন্ডিশন ব্যবহার করতে পারেন।


3

এক্সট্রা জেএস ওয়েব পৃষ্ঠাগুলি পরীক্ষা করা জটিল হতে পারে, কারণ জটিল জটিল এইচটিএমএলের কারণে তারা অতিরিক্ত জেএস গ্রিডের মতো তৈরি করে।

এইচটিএমএল 5 রোবট গতিশীল নয় এমন বৈশিষ্ট্য এবং শর্তগুলির ভিত্তিতে কীভাবে নির্ভরযোগ্যতার সাথে অনুসন্ধান এবং উপাদানগুলির সাথে ইন্টারঅ্যাক্ট করতে পারে তার জন্য সেরা অনুশীলনগুলির একটি সিরিজ ব্যবহার করে এর সাথে ডিল করে। এরপরে এটি এইচটিএমএল, এক্সট্রা জেএস এবং সেনচা টাচ উপাদানগুলির সাথে এটি করার জন্য শর্টকাট সরবরাহ করে যা আপনার সাথে ইন্টারঅ্যাক্ট করতে হবে। এটি 2 স্বাদে আসে:

  1. জাভা - পরিচিত সেলেনিয়াম এবং জুনিত ভিত্তিক এপিআই যা সমস্ত আধুনিক ব্রাউজারের জন্য ওয়েব ড্রাইভার সহায়তায় তৈরি করেছে।
  2. গওয়েন - দ্রুত এবং সহজেই ব্রাউজার পরীক্ষা তৈরি ও রক্ষণাবেক্ষণের জন্য একটি মানব রীতি ভাষা, যা তার নিজস্ব সংহত বিকাশের পরিবেশের সাথে আসে। যার সবকটি জাভা এপিআই-এর উপর ভিত্তি করে।

উদাহরণস্বরূপ, যদি আপনি "ফু" পাঠ্যযুক্ত এক্সট্রা জেএস গ্রিড সারিটি সন্ধান করতে চান, আপনি জাভাতে নিম্নলিখিতগুলি করতে পারেন:

findExtJsGridRow("Foo");

... এবং আপনি গোয়েন এ নিম্নলিখিত করতে পারেন:

extjsgridrow by text "Foo"

এক্সট্রা জেএস নির্দিষ্ট উপাদানগুলির সাথে কীভাবে কাজ করবেন সে সম্পর্কে জাভা এবং জওয়েন উভয়ের জন্য প্রচুর ডকুমেন্টেশন রয়েছে । ডকুমেন্টেশনে এই এক্সট্রা জেএস উপাদানগুলির জন্য ফলাফলগুলির এইচটিএমএলও বিশদযুক্ত রয়েছে যা আপনিও দরকারী হিসাবে দেখতে পারেন।


2

পৃষ্ঠায় গ্রিডের আইডির মাধ্যমে গ্রিড আনার জন্য দরকারী টিপস: আমি মনে করি আপনি এই API থেকে আরও কার্যকর ফাংশন প্রসারিত করতে পারেন।

   sub get_grid_row {
        my ($browser, $grid, $row)  = @_;


        my $script = "var doc = this.browserbot.getCurrentWindow().document;\n" .
            "var grid = doc.getElementById('$grid');\n" .
            "var table = grid.getElementsByTagName('table');\n" .
            "var result = '';\n" .
            "var row = 0;\n" . 
            "for (var i = 0; i < table.length; i++) {\n" .
            "   if (table[i].className == 'x-grid3-row-table') {\n".
            "       row++;\n" . 
            "       if (row == $row) {\n" .
            "           var cols_len = table[i].rows[0].cells.length;\n" .
            "           for (var j = 0; j < cols_len; j++) {\n" .
            "               var cell = table[i].rows[0].cells[j];\n" .
            "               if (result.length == 0) {\n" .
            "                   result = getText(cell);\n" .
            "               } else { \n" .
            "                   result += '|' + getText(cell);\n" .
            "               }\n" .
            "           }\n" .
            "       }\n" .
            "   }\n" .
            "}\n" .
            "result;\n";

        my $result = $browser->get_eval($script);
        my @res = split('\|', $result);
        return @res;
    }

2

কাস্টম এইচটিএমএল ডেটা- বৈশিষ্ট্যের মাধ্যমে আরও সহজ পরীক্ষা করা

থেকে সেঞ্চা ডকুমেন্টেশন :

আইটেম আইডি কোনও বিকল্পের রেফারেন্স পাওয়ার জন্য বিকল্প উপায় হিসাবে ব্যবহার করা যেতে পারে যখন কোনও বস্তুর রেফারেন্স পাওয়া যায় না। Ext.getCmp এর সাহায্যে কোনও আইডি ব্যবহার না করে, Ext.container.Container.getComp घटक সহ আইটেম আইড ব্যবহার করুন যা আইটেম আইড বা আইডি এর পুনরুদ্ধার করবে। যেহেতু আইটেম আইডিগুলি কনটেইনার অভ্যন্তরীণ মিক্সড কালেকশনের একটি সূচক, তাই আইটেম আইড স্থানীয়ভাবে পাত্রে স্থান করে দেওয়া হয় - এক্সট্রোম্পোনমেন্টম্যানেজারের সাথে সম্ভাব্য দ্বন্দ্ব এড়ানো যা একটি অনন্য আইডি প্রয়োজন।

Ext.AbstractComponentএর onBoxReadyপদ্ধতিটি ওভাররাইড করে আমি testIdAttrউপাদানটির itemIdমান হিসাবে একটি কাস্টম ডেটা অ্যাট্রিবিউট (যার নাম প্রতিটি উপাদানগুলির আমার কাস্টম সম্পত্তি থেকে আসে ) সেট করে it Testing.overrides.AbstractComponentআপনার application.jsফাইলের requiresঅ্যারেতে ক্লাস যুক্ত করুন ।

/**
 * Overrides the Ext.AbstracComponent's onBoxReady
 * method to add custom data attributes to the
 * component's dom structure.
 *
 * @author Brian Wendt
 */
Ext.define('Testing.overrides.AbstractComponent', {
  override: 'Ext.AbstractComponent',


  onBoxReady: function () {
    var me = this,
      el = me.getEl();


    if (el && el.dom && me.itemId) {
      el.dom.setAttribute(me.testIdAttr || 'data-selenium-id', me.itemId);
    }


    me.callOverridden(arguments);
  }
});

এই পদ্ধতিটি বিকাশকারীদের তাদের কোডের মধ্যে বর্ণনামূলক শনাক্তকারীকে পুনরায় ব্যবহার করার এবং প্রতিবার পৃষ্ঠাটি রেন্ডার করার সময় সেই শনাক্তকারীদের উপলব্ধ করার একটি উপায় সরবরাহ করে। অ-বর্ণনামূলক, গতিময়ভাবে উত্পন্ন আইডির মাধ্যমে আর অনুসন্ধান করা হবে না।


2

আমরা একটি টেস্টিং ফ্রেমওয়ার্ক বিকাশ করছি যা সেলেনিয়াম ব্যবহার করে এবং এক্সট্যাক্সগুলির সাথে সমস্যার মুখোমুখি হয় (যেহেতু এটি ক্লায়েন্ট সাইড রেন্ডারিং)। DOM প্রস্তুত হয়ে গেলে আমি একটি উপাদান অনুসন্ধান করা দরকারী মনে করি।

public static boolean waitUntilDOMIsReady(WebDriver driver) {
    def maxSeconds = DEFAULT_WAIT_SECONDS * 10
    for (count in 1..maxSeconds) {
        Thread.sleep(100)
        def ready = isDOMReady(driver);
        if (ready) {
            break;
        }
    }
}

public static boolean isDOMReady(WebDriver driver){
    return driver.executeScript("return document.readyState");
}

1

জটিল ইউআইয়ের জন্য যা প্রথাগত এইচটিএমএল নয়, এক্সপথ হ'ল এমন একটি জিনিস যা আপনি গণনা করতে পারেন তবে এক্সটজ ব্যবহার করে বিভিন্ন ইউআই প্রয়োগকরণের ক্ষেত্রে এটি কিছুটা জটিল।

নির্দিষ্ট উপাদানগুলির এক্সপ্যাথ পরীক্ষা করতে আপনি ফায়ারবগ এবং ফায়ারপ্যাথ ফায়ারফক্স এক্সটেনশন হিসাবে ব্যবহার করতে পারেন, এবং সেলেনিয়ামের প্যারামিটার হিসাবে সরল পাসপথ এক্সপ্যাথ।

জাভা কোডে উদাহরণস্বরূপ:

String fullXpath = "xpath=//div[@id='mainDiv']//div[contains(@class,'x-grid-row')]//table/tbody/tr[1]/td[1]//button"

selenium.click(fullXpath);

1

যখন আমি ওয়েবড্রাইভার ব্যবহার করে এক্সট্রিজি অ্যাপ্লিকেশন পরীক্ষা করছিলাম তখন আমি পরবর্তী পদ্ধতির ব্যবহার করেছি: আমি লেবেলের পাঠ্য অনুসারে ক্ষেত্রটি সন্ধান করেছি এবং লেবেল @forথেকে বৈশিষ্ট্য পেয়েছি । উদাহরণস্বরূপ, আমাদের একটি লেবেল রয়েছে

<label id="dynamic_id_label" class="TextboxLabel" for="textField_which_I_am_lloking_for">
Name Of Needed Label
<label/>

এবং আমরা কিছু ইনপুট WebDriver বাতলান করা প্রয়োজন: //input[@id=(//label[contains(text(),'Name Of Needed Label')]/@for)]

সুতরাং, এটি @forবৈশিষ্ট্য থেকে আইডিটি বেছে নেবে এবং এটি আরও ব্যবহার করবে। এটি সম্ভবত সহজতম ঘটনা তবে এটি আপনাকে উপাদান সনাক্ত করার উপায় দেয়। আপনার কাছে কোনও লেবেল না থাকলে এটি আরও শক্ত হয় তবে তারপরে আপনাকে কিছু উপাদান খুঁজে বের করতে হবে এবং ভাইবোনের সন্ধানে আপনার এক্সপথটি লিখতে হবে, উপাদানগুলি অবতরণ / আরোহণ করতে হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.