সংক্ষিপ্ত উত্তর
এই এক্সপথ এক্সপ্রেশনটি একটি বোতামটি জিজ্ঞাসা করবে যেখানে "বোতামের পাঠ্য" পাঠ্য রয়েছে:
const [button] = await page.$x("//button[contains(., 'Button text')]");
if (button) {
await button.click();
}
<div class="elements">
পার্শ্ববর্তী বোতামগুলির সম্মান করতে, নিম্নলিখিত কোডটি ব্যবহার করুন:
const [button] = await page.$x("//div[@class='elements']/button[contains(., 'Button text')]");
ব্যাখ্যা
পাঠ্য নোড ( text()
) ব্যবহার কেন কিছু ক্ষেত্রে ভুল তা ব্যাখ্যা করতে, আসুন একটি উদাহরণ দেখুন:
<div>
<button>Start End</button>
<button>Start <em>Middle</em> End</button>
</div>
প্রথমে ব্যবহারের সময় ফলাফলগুলি যাচাই করা যাক contains(text(), 'Text')
:
//button[contains(text(), 'Start')]
দুটি নোডই প্রত্যাবর্তন করবে (আশানুরূপ হিসাবে)
//button[contains(text(), 'End')]
দুটি গ্রন্থ ( এবং ) সহ একটি তালিকা ফেরত হিসাবে কেবল একটি নোড (প্রথম) text()
ফেরত দেবে , তবে কেবল প্রথমটি পরীক্ষা করবেStart
End
contains
//button[contains(text(), 'Middle')]
শিশু নোডের পাঠ্য অন্তর্ভুক্ত না করায় কোনও ফলাফল ফেরত দেবে নাtext()
এখানে এক্সপথ এক্সপ্রেশন contains(., 'Text')
রয়েছে যা এটির সন্তানের নোডগুলি সহ উপাদানটিতে কাজ করে:
//button[contains(., 'Start')]
দুটি বোতামই ফিরে আসবে
//button[contains(., 'End')]
আবার দুটি বোতামই ফিরে আসবে
//button[contains(., 'Middle')]
একটি ফিরে আসবে (শেষ বোতাম)
সুতরাং বেশিরভাগ ক্ষেত্রে, এটি এক্সপথ এক্সপ্রেশন .
পরিবর্তে ব্যবহার করার জন্য আরও বেশি text()
অর্থবোধ করে।