Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Selenium:ElementNotInteractitableException:尝试访问自动完成文本框时元素不可交互_Java_Selenium - Fatal编程技术网

Java Selenium:ElementNotInteractitableException:尝试访问自动完成文本框时元素不可交互

Java Selenium:ElementNotInteractitableException:尝试访问自动完成文本框时元素不可交互,java,selenium,Java,Selenium,我被困在WebElement中,我正试图用下面的代码在网页上访问它,但仍然被提到错误。元素允许自动完成主题,并在单个文本框中输入多个主题 WebElement Subjects = driver.findElement(By.xpath("//*[@id='subjectsContainer']")); JavascriptExecutor executor = (JavascriptExecutor)driver;

我被困在
WebElement
中,我正试图用下面的代码在网页上访问它,但仍然被提到错误。元素允许自动完成主题,并在单个文本框中输入多个主题

WebElement Subjects = driver.findElement(By.xpath("//*[@id='subjectsContainer']"));
        
        
        JavascriptExecutor executor = (JavascriptExecutor)driver;
        executor.executeScript("arguments[0].click();", Subjects);
        

        String subject1 = prop.getProperty("subject1");

        String subject2 = prop.getProperty("subject2");
        
        String subject3 = prop.getProperty("subject3");

        Subjects.sendKeys(subject1);

        Subjects.sendKeys(Keys.ENTER);

        Subjects.sendKeys(subject2);

        Subjects.sendKeys(Keys.ENTER);

        Subjects.sendKeys(subject3);

        Subjects.sendKeys(Keys.ENTER);

        driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);


在尝试向该元素发送文本之前,似乎需要添加一些延迟或元素可见性验证。

此外,除非您别无选择,否则不建议使用
JavaScript
单击而不是
WebDriver
单击。

请在下面找到我的查询答案,因为在设置了显式等待条件并使用标记名“input”定位正确的webElement后,它现在工作正常

//Load the data from the Properties file
         String subject1 = prop.getProperty("subject1");
          
        String subject2 = prop.getProperty("subject2");
          
        String subject3 = prop.getProperty("subject3");


        //WebElement to capture the visibility condition
        
        WebElement Subjects =driver.findElement(By.xpath("//*[@id='subjectsContainer']"));

        WebDriverWait wait = new WebDriverWait(driver, 10);
        wait.until(ExpectedConditions.elementToBeClickable(Subjects)).click();        
          
        WebElement Sub1 = driver.findElement(By.xpath("//input[@id='subjectsInput']"));

        wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//input[@id='subjectsInput']")));

        Sub1.sendKeys(subject1); //Send first Subject

        Sub1.sendKeys(Keys.ENTER);

        wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//input[@id='subjectsInput']")));

        System.out.println("ENtered subject 1" + subject1);

        Sub1.sendKeys(subject2); //Send second subject

        Sub1.sendKeys(Keys.ENTER);

        System.out.println("ENtered subject 2" + subject2);

        wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//input[@id='subjectsInput']")));

        Sub1.sendKeys(subject3); //Send thrid subject

        Sub1.sendKeys(Keys.ENTER);

        System.out.println("ENtered subject 3" + subject3);



对于许多不可交互的错误,一个快速而肮脏的解决方案就是:

Thread.sleep(500);

我发现,在实现更新中提到的更高效、更优雅的等待解决方案之前,这种策略在快速调试有问题的元素方面非常有用。

您能提供一个指向您正在处理的页面的链接吗?您在哪一代码行遇到此错误?我的回答解决了您的问题吗?当然。首先,您必须等待页面和要使用的元素完全加载。谢谢,在单击元素“``WebDriverWait wait wait=new WebDriverWait(driver,10)时添加显式等待后,现在它可以部分工作;等待.until(ExpectedConditions.elementToBeClickable(Subjects))。单击();`但是在执行时,sendKeys没有像“main”org.openqa.selenium.elementnotinteractitableexception:element notinteractitable“确定”那样工作。你也需要在发送文本之前增加延迟,而不仅仅是在点击之前。如果这是另一个元素。