वर्तमान शीर्ष जवाब tokland से केवल पाठ नोड्स पर और अन्य तत्वों के अंदर के साथ नोड्स पर नहीं काम करता है।
संक्षिप्त जवाब
यह एक्सपीथ एक्सप्रेशन एक बटन को क्वेरी करेगा जिसमें "बटन टेक्स्ट" लिखा है:
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()
इसमें बाल नोड्स का पाठ शामिल नहीं है
यहाँ XPath अभिव्यक्तियाँ हैं contains(., 'Text')
, जो अपने बच्चे के नोड्स सहित तत्व पर ही काम करता है:
//button[contains(., 'Start')]
दोनों दो बटन वापस करेंगे
//button[contains(., 'End')]
फिर से दोनों दो बटन वापस करेंगे
//button[contains(., 'Middle')]
एक (अंतिम बटन) वापस आएगा
तो ज्यादातर मामलों में, यह एक XPath अभिव्यक्ति के .
बजाय उपयोग करने के लिए अधिक समझ में आता है text()
।