org.openqa.selenium.ElementNotInteractableException: तत्व कीबोर्ड द्वारा उपलब्ध नहीं है: Facebook में FirstName फ़ील्ड को पाठ भेजते समय




react-native selenium-webdriver (3)

आप इस कोड को आज़मा सकते हैं:

public class Rozmeen{

    static WebDriver driver;
    static WebDriverWait wait;

    public static void main(String[] args) throws InterruptedException {
            System.setProperty("webdriver.gecko.driver", "F:\\Automation\\geckodriver.exe");
            driver = new FirefoxDriver();
            driver.manage().window().maximize();
            WebDriverWait wait = new WebDriverWait(driver, 40);
            driver.get("http://www.facebook.com");

            //entering first name
            wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.id("pagelet_bluebar"))));
            driver.findElement(By.name("firstname")).sendKeys("testing it ");

            //DOB
            selectFromDropDown(driver.findElement(By.name("birthday_day")), "4");
            selectFromDropDown(driver.findElement(By.name("birthday_month")), "Jun");
            selectFromDropDown(driver.findElement(By.name("birthday_year")), "2013");

            //clicking sign up
            wait.until(ExpectedConditions.elementToBeClickable(driver.findElement(By.name("websubmit"))));
            driver.findElement(By.name("websubmit")).click();
        }



        public static void selectFromDropDown(WebElement element , String Visibletext){
            Select select = new Select(element);
            select.selectByVisibleText(Visibletext);
        }
}  

इस कोड को आज़माएं और मुझे स्थिति बताएं।

त्रुटि है:

Exception in thread "main" org.openqa.selenium.ElementNotInteractableException: Element <div id="u_0_b" class="_5dbb"> is not reachable by keyboard

कोड है:

System.setProperty("webdriver.gecko.driver","//Users//rozali//Documents//Selenium//geckodriver");
    WebDriver driver = new FirefoxDriver();
    driver.get("http://www.facebook.com");
    driver.manage().window().maximize();

    //entering first name
    driver.findElement(By.id("u_0_b")).click();
    driver.findElement(By.id("u_0_b")).sendKeys("testing it ");

    //DOB
    Select sel1 = new Select(driver.findElement(By.xpath(".//*[@id='month']")));
    sel1.selectByIndex(4);

    Select sel2 = new Select(driver.findElement(By.xpath(".//*[@id='day']")));
    sel2.selectByValue("6");

    Select sel3 = new Select(driver.findElement(By.xpath(".//*[@id='year']")));
    sel3.selectByValue("2013");

    //clicking sign up
    driver.findElement(By.id("u_0_t")).click();

उपयोग के मामलों में से एक में मेरे पास एक ही मुद्दा था:

 Exception in thread "main" org.openqa.selenium.ElementNotInteractableException: Element <div id="search"> is not reachable by keyboard 

चाबियाँ भेजने से पहले एक तत्व की पहचान करने के लिए आईडी का उपयोग करना। कुछ इस तरह:

 driver.findElement(By.id("search")).sendKeys("..."); 

परीक्षण के बाद मैं CSS चयनकर्ता में बदल गया और इसने इस समस्या को हल किया:

 driver.findElement(By.cssSelector("#search > input:nth-child(2)")).sendKeys("..."); 

इसलिए, मैं तत्वों के साथ बातचीत करने के लिए विभिन्न तरीकों का उपयोग करने की अत्यधिक सलाह देता हूं, क्योंकि कुछ और आपके समय की समस्याओं को हल कर सकते हैं।


ElementNotInteractableException: तत्व कीबोर्ड द्वारा उपलब्ध नहीं है

Element is not reachable by keyboard सादे शब्दों में Element is not reachable by keyboard इसका मतलब है कि कीबोर्ड का उपयोग करके तत्व तक नहीं पहुंचा जा सकता है, जिसका अर्थ है कि आप भौतिक रूप से इसके साथ बातचीत नहीं करेंगे।

कारण

त्रुटि के पीछे कई कारण हो सकते हैं तत्व कीबोर्ड द्वारा उपलब्ध नहीं है जो निम्न में से कोई भी हो सकता है:

  • तत्व को आधुनिक जावास्क्रिप्ट-केंद्रित यूआई शैलियों के रूप में छिपाया गया है जो हमेशा बदसूरत कच्चे HTML इनपुट क्षेत्र को छिपाए रखता है। hidden विशेषता निम्नलिखित तरीकों से लागू की जा सकती है:
    • वांछित तत्व के ऊपर किसी अन्य तत्व का एक अस्थायी ओवरले
    • वांछित तत्व के ऊपर किसी अन्य तत्व का एक स्थायी ओवरले
    • विशेषताओं की उपस्थिति जैसे class="ng-hide" , style="display: none" , आदि
    • चरित्र अनुक्रम भेजते समय सर्वोत्तम प्रथाओं के अनुसार, आपको किसी भी <p> या <div> टैग पर click() या sendKeys() भेजने का प्रयास नहीं करना चाहिए, इसके बजाय आधिकारिक लोकेटर रणनीतियों का पालन ​​करते हुए वांछित <input> टैग पर click() वेबड्राइवर के लिए

उपाय

इस समस्या को हल करने के लिए अलग-अलग दृष्टिकोण हैं।

संदर्भ

यह विशेष रूप से मुद्दा

यदि आप फेसबुक लॉगिन पृष्ठ के HTML में देखते हैं, तो एप्लिकेशन में React Native तत्व शामिल हैं। तो एक बार आपके सिस्टम में u_0_b के रूप में id साथ प्रतिनिधित्व किया गया एक तत्व आपके सिस्टम पर अगले रन में u_0_b के रूप में उसी id द्वारा प्रतिनिधित्व नहीं किया जा सकता है। इसलिए, हमें डायनेमिक लोकेटर रणनीति की मदद लेनी होगी। अपने इच्छित चरणों को करने के लिए आप निम्न कोड ब्लॉक का उपयोग कर सकते हैं:

  • कोड ब्लॉक:

    System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
    WebDriver driver = new FirefoxDriver();
    driver.get("https://www.facebook.com");
    driver.findElement(By.xpath("//input[@name='firstname' and contains(@class,'inputtext')]")).sendKeys("testing it ");
    //DOB
    Select sel1 = new Select(driver.findElement(By.xpath(".//*[@id='month']")));
    sel1.selectByIndex(4);
    Select sel2 = new Select(driver.findElement(By.xpath(".//*[@id='day']")));
    sel2.selectByValue("6");
    Select sel3 = new Select(driver.findElement(By.xpath(".//*[@id='year']")));
    sel3.selectByValue("2013");
    //clicking sign up
    driver.findElement(By.xpath("//button[@name='websubmit' and contains(.,'Sign Up')]")).click();
    
  • ब्राउज़र क्लाइंट:

अद्यतन करें

त्रुटि को संबोधित करना:

org.openqa.selenium.ElementNotInteractableException: Element is not reachable by keyboard

फ़ायरफ़ॉक्स क्षमता की उपलब्धता के साथ और अधिक आसान हो गए हैं moz:webdriverClick

moz: webdriverClick ()

webdriverClick() माध्यम से आप एक बूलियन मान पास कर सकते हैं जो यह इंगित करने के लिए कि किस तरह की इंटरएक्टेबिलिटी चेक क्लिक करते समय चलती है या तत्वों को कुंजी भेजती है। फ़ायरफ़ॉक्सन से पहले v58.0 के लिए फ़ायरफ़ॉक्सड्राइवर के पुराने संस्करण से आयातित कुछ विरासत कोड उपयोग में था। फ़ायरफ़ॉक्स v58 की उपलब्धता के साथ वेबड्राइवर विनिर्देश द्वारा आवश्यक इंटरएक्टेबिलिटी चेक डिफ़ॉल्ट रूप से सक्षम हैं। इसका मतलब यह है कि जेकोड्राइवर अतिरिक्त जांच करेगा कि क्या एक तत्व क्लिक करते समय किसी अन्य द्वारा अस्पष्ट है, और यदि कोई तत्व चाबियाँ भेजने के लिए ध्यान देने योग्य है। व्यवहार में इस परिवर्तन के कारण, हम जानते हैं कि कुछ अतिरिक्त त्रुटियां वापस आ सकती हैं। अधिकांश मामलों में विचाराधीन परीक्षण को अद्यतन करना पड़ सकता है, इसलिए यह नई जाँचों के अनुरूप है।

वेबड्राइवर कन्फ़र्मेंट चेकों को अस्थायी रूप से अक्षम करने के लिए इस क्षमता के लिए false मान का उपयोग करें।

नोट : यह क्षमता केवल अस्थायी रूप से मौजूद है, और यह कि इंटरएक्टेबिलिटी चेक स्थिर हो जाने के बाद इसे हटा दिया जाएगा।