XPATH ব্যবহার করে & nbsp;


120

আমি কোনও HTML পৃষ্ঠায় আমার এক্সপ্যাথ এক্সপ্রেশন চেক করতে এক্সপথ ব্রাউজার ব্যবহার করি ।

আমার শেষ লক্ষ্যটি হল আমার ব্যবহারকারী ইন্টারফেসগুলির পরীক্ষার জন্য সেলেনিয়ামে এই এক্সপ্রেশনগুলি ব্যবহার করা।

এর মতো একটি সামগ্রী সহ আমি একটি এইচটিএমএল ফাইল পেয়েছি:

<TR>
  <TD> এবিসি </ TD>
  <TD> করুন & nbsp; </ TD>
</ TR>

আমি স্ট্রিং " &nbsp;" সহ একটি পাঠ্য সহ একটি নোড নির্বাচন করতে চাই ।

"এবিসি" এর মতো একটি সাধারণ স্ট্রিং সহ কোনও সমস্যা নেই। আমি এর মতো একটি এক্সপ্যাট ব্যবহার করি //td[text()="abc"]

আমি যখন কোনও এক্সপিএটিএইচএইচ দিয়ে চেষ্টা করি তখন //td[text()="&nbsp;"]এটি কিছুই দেয় না। " &" সহ পাঠ্য সম্পর্কিত কোনও বিশেষ নিয়ম রয়েছে ?


আপনার আসল এক্সএসএল রূপান্তরটি কি কিছুই ফেরায় না? নাকি কেবল এক্সপ্যাটার?
জ্যাক দ্য হিউম্যান

উত্তর:


89

দেখে মনে হচ্ছে সেলেনিয়ামের পিছনে থাকা ওপেনকিউএ ইতিমধ্যে এই সমস্যাটির সমাধান করেছে। তারা কিছু পরিবর্তনশীল সংজ্ঞায়িতভাবে সাদা স্পেসগুলিতে মেলে defined আমার ক্ষেত্রে, আমার অনুরূপ একটি XPATH ব্যবহার করা উচিত //td[text()="${nbsp}"]

আমি এখানে পুনরুত্পাদন এই সমস্যা (পাওয়া বিষয়ে OpenQA থেকে টেক্সট এখানে ):

এইচটিএমএল স্বয়ংক্রিয়ভাবে উপাদানগুলির মধ্যে শ্বেতক্ষেত্রকে স্বাভাবিক করে তোলে, শীর্ষস্থানীয় / পিছনের স্থানগুলি উপেক্ষা করে অতিরিক্ত স্থান, ট্যাব এবং নিউলাইনগুলিকে একক জায়গায় রূপান্তর করে। যখন সেলেনিয়াম পৃষ্ঠার বাইরে পাঠ্য পাঠ করে, এটি এই আচরণটির সদৃশ করার চেষ্টা করে, তাই আপনি আপনার HTML এর সমস্ত ট্যাব এবং নিউলাইনগুলিকে উপেক্ষা করতে পারেন এবং রেন্ডার করার সময় ব্রাউজারে পাঠ্যটি কীভাবে দেখায় তার উপর ভিত্তি করে দৃ do়তা জানাতে পারেন। আমরা সমস্ত অ-দৃশ্যমান শ্বেত স্পেস (অ-ব্রেকিং স্পেস সহ &nbsp;") একক স্পেসে প্রতিস্থাপন করে এটি করি । সমস্ত দৃশ্যমান নিউলাইনগুলি ( <br>, <p>এবং <pre>ফর্ম্যাট করা নতুন লাইন) সংরক্ষণ করা উচিত।

আমরা এইচটিএমএল সেলিনিজ পরীক্ষার কেস সারণীর পাঠ্যে একই স্বাভাবিককরণের যুক্তি ব্যবহার করি। এর অনেকগুলি সুবিধা রয়েছে। প্রথমত, আপনার দাবিগুলি কী হওয়া উচিত তা নির্ধারণ করার জন্য আপনাকে পৃষ্ঠার এইচটিএমএল উত্সটি দেখার দরকার নেই; " &nbsp;" প্রতীকগুলি শেষ ব্যবহারকারীর কাছে অদৃশ্য এবং সুতরাং সেলিনিজ পরীক্ষাগুলি লেখার সময় আপনার সেগুলি সম্পর্কে চিন্তা করার দরকার নেই। (" &nbsp;" যে ক্ষেত্র " &nbsp;" রয়েছে এমন ক্ষেত্রের প্রতিস্থাপনের জন্য আপনাকে " " পরীক্ষার ক্ষেত্রে " " চিহ্নিতকারী লাগানোর দরকার নেই )) আপনি নিজের সেলিনিজ <td>ট্যাগগুলিতে অতিরিক্ত নতুন লাইন এবং স্পেসও রেখে যেতে পারেন ; যেহেতু আমরা পরীক্ষার ক্ষেত্রে যেমন একইসাথে সাধারণীকরণের যুক্তি ব্যবহার করি তেমনি আমরা নিশ্চিত করতে পারি যে উত্সগুলি এবং নিষ্কাশিত পাঠ্যটি ঠিক মিলবে।

আপনি যখন সত্যিই আপনার পরীক্ষার ক্ষেত্রে অতিরিক্ত শ্বেত স্পেস toোকানোর প্রয়োজন চান তখন এই বিরল ঘটনাগুলিতে কিছুটা সমস্যা তৈরি করে। উদাহরণস্বরূপ, আপনার এই জাতীয় ক্ষেত্রে পাঠ্য টাইপ করতে হতে পারে: " foo "। তবে আপনি যদি কেবল <td>foo </td>নিজের সেলিনিজ পরীক্ষার ক্ষেত্রে লিখেন তবে আমরা আপনার অতিরিক্ত স্থানটি কেবলমাত্র একটি স্থানের সাথে প্রতিস্থাপন করব।

এই সমস্যাটির একটি সাধারণ কাজ রয়েছে। আমরা সেলেনিজে একটি পরিবর্তনশীল সংজ্ঞায়িত করেছি ${space}, যার মান একক স্থান। আপনি ${space}এমন একটি স্থান সন্নিবেশ করতে ব্যবহার করতে পারেন যা স্বয়ংক্রিয়ভাবে ছাঁটাই হবে না: এর মতো <td>foo${space}${space}${space}</td>। আমরা একটি ভেরিয়েবলও অন্তর্ভুক্ত করেছি ${nbsp}, যা আপনি একটি অবিচ্ছেদ্য স্থান .োকাতে ব্যবহার করতে পারেন।

লক্ষ্য করুন XPaths না না স্বাভাবিক হোয়াইটস্পেস আমরা যেভাবে না। তোমার মত একটি জন্য XPath লিখতে করার প্রয়োজন হলে //div[text()="hello world"]কিন্তু লিংক এইচটিএমএল সত্যিই হয় " hello&nbsp;world", আপনি একটি বাস্তব সন্নিবেশ করতে হবে " &nbsp;এই মত, এটা মেলে পেতে আপনার Selenese পরীক্ষা ক্ষেত্রে মধ্যে": //div[text()="hello${nbsp}world"]


1
ওপেনকিউএ লিঙ্কটি আর সফলভাবে লোড হচ্ছে না
kjosh

1
আমি কেবল লক্ষ করতে চাই যে len bsp nbsp me আমার জন্য সেলেনিয়াম বা ক্রোম দেব সরঞ্জামগুলিতে কাজ করছে না, তাও নয় \u00a0। আমার জন্য যা কাজ করেছে তা ম্যাকের উপর একটি ব্রেক-ব্রেকিং স্পেস টাইপ করা ছিল Alt+Shift+Space। ওয়েব সন্ধান Alt+0160উইন্ডোতে বলে ।
সিনিক

25

আমি খুঁজে পেলাম যে আমি যখন দুটি কোটের মধ্যে উইন্ডোজে Alt + 0160 টাইপ করে হার্ড-কোডড নন-ব্রেকিং স্পেস (U + 00A0) ইনপুট করি তখন আমি ম্যাচটি তৈরি করতে পারি ...

//table[@id='TableID']//td[text()=' ']

আমার জন্য বিশেষ চর নিয়ে কাজ করেছেন।

আমি যা বুঝতে পেরেছি সেগুলি থেকে, এক্সপথ ০.০ স্ট্যান্ডার্ড ইউনিকোড অক্ষরগুলি পালনের বিষয়টি পরিচালনা করে না। এটি এক্সপ্যাথ ২.০-তে রয়েছে বলে মনে হয় তবে ফায়ারফক্স এটি সমর্থন করে না বলে মনে হয় (বা আমি কিছু ভুল বুঝেছি)। সুতরাং আপনাকে স্থানীয় কোডপেজের সাথে করতে হবে। কুৎসিত, আমি জানি।

প্রকৃতপক্ষে, দেখে মনে হচ্ছে মানকটি এক্সপ্যাথটি ব্যবহার করে সঠিক ইউনিকোড এস্কেপ ক্রম সরবরাহ করার জন্য প্রোগ্রামিং ভাষার উপর নির্ভর করছে ... সুতরাং, আমি কোনওভাবে সঠিক কাজটি করেছি।


ফায়ারফক্স 2, // টিডি [টেক্সট () = ''] এ এক্সপাথর 1.4.1 ব্যবহার করে কোনও ফল পাওয়া যায় না।
জ্যাক দ্য হিউম্যান

দুঃখিত। এটি আমার পক্ষে কাজ করে না। আমার শেষ লক্ষ্যটি এটি আমার ওয়েব ইন্টারফেসের পরীক্ষার জন্য সেলেনিয়ামে ব্যবহার করা। সেলেনিয়াম নিজেই একটি এক্সএমএল কাঠামোতে পরীক্ষার এক্সপ্রেশনগুলি রাখে এবং আল্ট উইন্ডোজ টাইপিংটি হারিয়ে গেছে বলে মনে হয়। এছাড়াও, আমার & # 160; এক্সএমএল হিসাবে ফিরে আসে
বার্গেরয়

জ্যাক, যেমনটি আমি লিখেছি, আপনাকে Alt + 0160 (সংখ্যার কীপ্যাডে) দ্বারা নির্মিত চরিত্র দ্বারা দুটি উদ্ধৃতিগুলির মধ্যে স্থানটি পরিবর্তন করতে হবে।
ফিলিহো

4
পিএইচপি এর সাথে এটি সফলভাবে কাজ করতে পেলাম:$col = $xpath->query("//p[text()=\"\xC2\xA0\"]");
হ্যাক্রে

@ বার্গরি এটি সেলেনিয়াম ড্রাইভার
ড্যামিয়ান গ্রিন

4

&#160;নামযুক্ত সত্তার পরিবর্তে দশমিক সত্তা ব্যবহার করার চেষ্টা করুন । যদি এটি কাজ না করে, আপনি সত্তার পরিবর্তে অবিচ্ছেদ্য জায়গার জন্য কেবল ইউনিকোড অক্ষরটি ব্যবহার করতে সক্ষম হবেন &nbsp;

(দ্রষ্টব্য: আমি এক্সপ্যাটারে এটি চেষ্টা করিনি, তবে আমি অক্সিজেনেও চেষ্টা করেছি।)


2

মনে রাখবেন যে একটি মান-অনুবর্তী এক্সএমএল প্রসেসর কোনো সত্তা এক্সএমএল এর পাঁচটি মান বেশী ছাড়া অন্য রেফারেন্স (প্রতিস্থাপিত হবে &amp;, &gt;, &lt;, &apos;, &quot;সময় জন্য XPath এক্সপ্রেশন মূল্যায়ন করা হয় দ্বারা লক্ষ্য এনকোডিং সংশ্লিষ্ট অক্ষর দিয়ে)। এই আচরণটি দেওয়া, আপনি এক্সএমএল সরঞ্জামগুলির সাথে কাজ করতে চাইলে ফিলো এবং জুলাকের পরামর্শগুলি হ'ল উপায়। আপনি যখন &#160;এক্সপথ এক্সপ্রেশনটিতে প্রবেশ করেন, এক্সপথ এক্সপ্রেশন প্রয়োগ হওয়ার আগে এটি সংশ্লিষ্ট বাইট ক্রমে রূপান্তর করা উচিত।


1
আপনি যদি XPath (GUI) বা জাভাস্ক্রিপ্টে এক্সপ্যাথ ব্যবহার করে / জাভাস্ক্রিপ্টে ব্যবহার করেন না (সত্তার কোনও স্ব-প্রতিস্থাপন নয়, যেহেতু আমরা এক্সএমএলে নেই)। অন্যান্য এক্সএমএল পরিবেশে (এক্সএসটিএল?) ভাল পরামর্শ।
ফিলোহো

1

আমি এক্সপ্যাডার ব্যবহার করে কোনও মিল পেতে পারি না, তবে নিম্নলিখিতগুলি মাইক্রোসফ্টের এক্সএমএল নোটপ্যাডে প্লেন এক্সএমএল এবং এক্সএসএল ফাইলগুলির সাথে আমার জন্য কাজ করেছে:

<xsl:value-of select="count(//td[text()='&nbsp;'])" />

প্রত্যাবর্তিত মান 1, যা আমার পরীক্ষার ক্ষেত্রে সঠিক মান।

তবে, আমাকে নিম্নলিখিতটি ব্যবহার করে আমার এক্সএমএল এবং এক্সএসএল-এর মধ্যে সত্তা হিসাবে এনএসপিএস ঘোষণা করতে হবে :

<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#160;"> ]>

আমি নিশ্চিত যে আপনি যদি সাহায্য করে, কিন্তু আমি পারতাম আছি আসলে এটি Nbsp একটি xpath প্রকাশ করে।

সম্পাদনা করুন: আমার কোডের নমুনায় আসলে '& nbsp' অক্ষর রয়েছে তবে জাভাস্ক্রিপ্ট সিনট্যাক্স হাইলাইট এটিকে স্থানের অক্ষরে রূপান্তরিত করে। বিভ্রান্ত হবেন না!


আপনি আমার কোড নমুনাটি যেমন আমার প্রশ্নের নমুনার জন্য সম্পন্ন করেছিলেন তেমন সম্পাদনা করতে পারেন। আপনার এনএমএস সত্তাকে & amp; nbsp; দ্বারা প্রতিস্থাপন করুন।
বার্গেরয়

1

অনুসন্ধান করুন &nbsp;বা কেবল nbsp- আপনি কি এটি চেষ্টা করেছিলেন?


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

হয়তো আমার নিয়মিত প্রকাশের দিকে নজর দেওয়া উচিত।
বার্গেরয়

1

আপনি সরবরাহ করেছেন এইচটিএমএল অনুসারে:

<tr>
  <td>abc</td>
  <td>&nbsp;</td>
</tr>

স্ট্রিং সহ নোডটি সনাক্ত &nbsp;করতে আপনি নিম্নলিখিত দুটি ব্যবহার করতে পারেন ভিত্তিক সমাধান:

  • ব্যবহার text():

    "//td[text()='\u00A0']"
  • ব্যবহার contains():

    "//td[contains(., '\u00A0')]"

তবে, আদর্শভাবে আপনি NO-BREAK স্পেস অক্ষর এড়াতে পছন্দ করতে পারেন এবং নিম্নলিখিত লোকেটার কৌশলগুলি ব্যবহার করুন :

  • প্যারেন্ট <tr>নোড এবং following-sibling:

    "//tr//following-sibling::td[2]"
  • ব্যবহার starts-with():

    "//tr//td[last()]"
  • প্রিরিডিং <td>নোড এবং followingnode andনিম্নলিখিত-ভাইব্লিং ব্যবহার করে :

    "//td[text()='abc']//following::td[1]"

উল্লেখ

আপনি এখানে প্রাসঙ্গিক বিস্তারিত আলোচনা পেতে পারেন:


TL; ডাঃ

ইউনিকোড অক্ষর 'ন-BREAK স্পেস' (U + 00A0)


-2

আপনি সনাক্ত করতে কোনও অনন্য বৈশিষ্ট্য নেই এমন উপাদানগুলি সনাক্ত করতে সেলেনিয়াম ওয়েবড্রাইভারে এক্সপথ কনটেনস, সিবলিং, পূর্বপুরুষের কার্যাদি ব্যবহার করতে পারেন।

আরও তথ্যের জন্য, এই পৃষ্ঠাটি পড়ুন: https://www.guru99.com/using-contains-sbiling-ancestor-to-find-element-in-selenium.html

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