सेलेनियम - जावा का उपयोग कर रेडियो बटन चुनने में परेशानी
मैं क्रोम पर सेलेनियम का उपयोग करके कुछ परीक्षण को स्वचालित करने का प्रयास कर रहा हूं। मैं अगले चरण पर जाने से पहले रेडियो बटन का चयन करने के साथ एक समस्या में चल रहा हूं। मुझे लगातार रेडियो बटन के चयन के लिए हर विधि के साथ 'NoSuchElementException' त्रुटि मिल रही है। नीचे HTML कोड है जो रेडियो बटन के लिए है, मैं पहले "न्यू (खाली)" का चयन करने की कोशिश कर रहा हूं।
<td>
<input type="radio" name="selections" value="emptyAssembly" id="New (Empty)" onclick="onSelection([emptyAssembly, existingAssembly, assemblyFile, virtualDocument], emptyAssembly)">
New (Empty)
<br>
<input type="radio" name="selections" value="existingAssembly" id="Existing Template, Assembly or View" onclick="onSelection([emptyAssembly, existingAssembly, assemblyFile, virtualDocument], existingAssembly)">
Existing Template, Assembly or View
<br>
<input type="radio" name="selections" value="assemblyFile" id="Assembly File" onclick="onSelection([emptyAssembly, existingAssembly, assemblyFile, virtualDocument], assemblyFile)">
Assembly File
<br>
<input type="radio" name="selections" value="virtualDocument" id="Virtual Document" onclick="onSelection([emptyAssembly, existingAssembly, assemblyFile, virtualDocument], virtualDocument)">
Virtual Document
<br>
</td>
नीचे कुछ तरीके दिए गए हैं, जिनका चयन करने का मैंने प्रयास किया है (थ्रेड स्लीप वहीं है जहां एक सामान्य समस्या थी जिसे लोग रेडियो बटन के साथ देखते थे):
Thread.sleep(5000);
webDriver.findElement(By.xpath("//input[@id='New (Empty)']")).click();
Thread.sleep(5000);
webDriver.findElement(By.id("New (Empty)")).click();
मैंने दूसरों की कोशिश की, लेकिन उन पर नज़र नहीं रखी, उन्होंने सभी को एक ही NoSuchElementException त्रुटि फेंक दी।
मैंने नीचे दिए गए अन्य धागे के रूप में सुझाई गई एक सूची बनाकर इसे चुनने का प्रयास किया, इसके लिए मुझे एक विचारधारा त्रुटि मिलती है क्योंकि सूची में कुछ भी नहीं है:
webDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
List<WebElement> methods = webDriver.findElements(By.name("selections"));
methods.get(0).click();
जवाब
करने के लिए click()
के रूप में पाठ के साथ तत्व पर नए (खाली) आप निम्नलिखित में से किसी का उपयोग कर सकते लोकेटर रणनीतियाँ :
cssSelector
:webDriver.findElement(By.cssSelector("input[id*='Empty'][value='emptyAssembly']")).click();
xpath
:webDriver.findElement(By.xpath("//input[@value='emptyAssembly' and contains(@id, 'Empty')]")).click();
हालांकि, चूंकि तत्व एक गतिशील तत्व है, इसलिए click()
इस तत्व पर आपको WebDriverWait के लिए प्रेरित करने की आवश्यकता है elementToBeClickable()
और आप निम्न लोकेटर रणनीतियों में से किसी एक का उपयोग कर सकते हैं :
cssSelector
:new WebDriverWait(webDriver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("input[id*='Empty'][value='emptyAssembly']"))).click();
xpath
:new WebDriverWait(webDriver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@value='emptyAssembly' and contains(@id, 'Empty')]"))).click();
अपने प्रदान किए गए HTML कोड के साथ एक .html फ़ाइल बनाने की कोशिश करें और उस स्थानीय HTML फ़ाइल पर अपने तरीकों को फिर से आज़माएँ। मैंने कोशिश की है और आपके सभी तरीके पूरी तरह से काम कर रहे हैं।
मुद्दा आपके तरीकों या पटकथा में नहीं है, इसके कुछ और में है। हो सकता है कि वे तत्व गतिशील हों या उस बिंदु पर क्लिक करने योग्य न हों।
तो क्या आप कुछ और जानकारी दे सकते हैं। जैसे परिदृश्य या परीक्षण का मामला क्या है, उस बिंदु तक पहुंचने के लिए पिछले चरण क्या हैं (उन रेडियो बटन पर क्लिक करके)। और यदि संभव हो तो कुछ और HTML कोड (मूल टैग) और अपने वेबपेज का स्क्रीनशॉट प्रदान करें।