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“确定”那样工作。你也需要在发送文本之前增加延迟,而不仅仅是在点击之前。如果这是另一个元素。