Java 查找复选框并添加文本

Java 查找复选框并添加文本,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我想在第二个文本字段中添加一个文本字符串 我的selenium方法如下所示: public void addSecondaryText(String string) { //click secondary button WebElement secButton = driver.findElement(By.xpath("//label/input[@id='sub-text-check']")); if (secButton.isDisplayed(

我想在第二个文本字段中添加一个文本字符串

我的selenium方法如下所示:

public void addSecondaryText(String string) {
    //click secondary button
    WebElement secButton = driver.findElement(By.xpath("//label/input[@id='sub-text-check']"));
    if (secButton.isDisplayed()) {
        secButton.click();          
    }
    //clear text
    WebElement secTextField = driver.findElement(By.xpath("//*[@id='sub-text']"));
    secTextField.clear(); // I get the exception here!
    //add text
    secTextField.sendKeys(string);
}
但是,我目前得到了
secTextField.clear()的一个异常,表示无法对其进行操作:

Exception in thread "main" org.openqa.selenium.InvalidElementStateException: invalid element state: Element is not currently interactable and may not be manipulated
有什么建议我做错了什么


谢谢你的回复

这里的问题是textarea依赖于另一个按钮,您需要在使textarea可编辑之前单击它。见下图

//List will help of to determine the "Add secondary text" button needs to be clicked on not
//if the count is greater than 0 then click it
IList<IWebElement> elements = driver.FindElements(By.XPath("//span[contains(text(),'Add secondary text')]"));
if (elements.Count>0)
{
    elements.FirstOrDefault().Click();
}
IWebElement element = driver.FindElement(By.Id("sub-text"));
element.Clear();
element.SendKeys("Test");
//列表将帮助确定是否需要单击“添加辅助文本”按钮
//如果计数大于0,则单击它
IList elements=driver.FindElements(By.XPath(//span[contains(text(),'Add secondary text')]);
如果(元素计数>0)
{
元素。FirstOrDefault()。单击();
}
IWebElement元素=driver.FindElement(By.Id(“子文本”);
元素。Clear();
元素。发送键(“测试”);

以下代码应该可以工作-

public void addSecondaryText(String string) {
    //click secondary button
    WebElement secButton = driver.findElement(By.xpath("//span[@class='sub-text-toggle']"));
    secButton.click();

    //clear text
    WebElement secTextField = driver.findElement(By.xpath("//*[@id='sub-text']"));
    secTextField.clear(); // I get the exception here!
    //add text
    secTextField.sendKeys(string);
}

您是否尝试过在发送clear之前添加等待?@VikasNehaOjha只是等待
Thread.sleep(5000),但是,我仍然得到与上面相同的结果。您首先需要使secButton.click()正常工作。将其从if条件中删除,因为它将被显示。在您完成这项工作之后,secTextField.clear()也应该可以工作。他能够找到正确的元素,但无法对其进行操作。因为他无法单击使目标字段显示的按钮。@VikasNehaOjha正确。但是,他瞄准了错误的元素。我编写选择器的方式是,它将快速检查元素是否被切换。他所针对的元素是正确的。但它是隐藏的,只有在点击另一个按钮时才可见,而他并没有点击。影响文本区域的是同一个元素(按钮)。对于选择器OP is using,并不保证它会更改它应该是的textarea的状态。在正确的状态下,复选框应返回
isDisplayed()
==trueI agree。事实上,我患有强迫症,并且一直以非常传统的方式看待这个问题。