sendKeys 无法在带有 area-label 的文本区域上工作并获取元素不可交互异常

sendKeys not working on textarea with area-label and getting element not interactable exception

首先为如此糟糕的标题道歉,请提出一个好的标题。

以下是我面临的问题的详细信息:

网站: https://www.desmos.com/calculator/lzidy3m70r

步骤:

  1. 点击左上角的+按钮
  2. Select 图片并上传任何图片
  3. 更新字段中心、宽度和高度的值

问题:无法与中心、宽度和高度的任何文本区域交互。继续获取可交互异常的元素

这是html

如您所见,宽度字段没有输入标签,只有 2 个 span 分别显示 15,textarea 也不可交互

这是我用来识别 textarea 或 span 的 xpath:

//textarea[contains(@class,'dcg-smart-textarea') and text()='"+imageName+"']/parent::div/parent::div/following-sibling::div//span[@class='dcg-mq-textarea']/textarea

//textarea[contains(@class,'dcg-smart-textarea')]/parent::div/parent::div/following-sibling::div//span[@class='dcg-mq-root-block dcg-mq-editing-overflow-right']/span

我尝试了很多方法,比如先点击 div,一旦光标可用,然后尝试输入或先点击,然后清除,然后输入,但点击成功后下一步失败,显示异常元素不可交互。

我在想 javascriptexecutor 需要以某种方式处理这种情况,但我不太了解 javascript 以及处理此类字段的方法。

有人可以帮我解决这个问题并成功输入中心、宽度和高度字段的值吗?

对于这种情况,您不需要 JavaScript 执行者。

使用下面的 xpath

//div[text()='Center:']//following-sibling::div

您可以找到与中心、宽度和高度的 div 字段相关的所有 Web 元素。

现在定位我正在使用 xpath 索引的第一个元素:

(//div[text()='Center:']//following-sibling::div)[1]

这将针对第一个中心区域。

此外,我们将必须清除 div 中已经存在的默认值,因为我们有循环。

代码:

    driver.manage().window().maximize();
    WebDriverWait wait = new WebDriverWait(driver, 30);
    //driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
    driver.get("https://www.desmos.com/calculator/lzidy3m70r");
    Actions action = new Actions(driver);
    WebElement centerWebElement = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("(//div[text()='Center:']//following-sibling::div)[1]")));
    centerWebElement.click();
    for (int i = 0; i<=10 ; i++) {
        action.moveToElement(centerWebElement).sendKeys(Keys.BACK_SPACE).build().perform();
        Thread.sleep(100);
        System.out.println("Clicked on delete for "+ i + " time");
    }
    new Actions(driver).moveToElement(centerWebElement).pause(2).sendKeys("2021, 2021").build().perform();

同理,第一个宽度

(//div[text()='Center:']//following-sibling::div)[3]

和第一个高度

(//div[text()='Center:']//following-sibling::div)[7]

应该可以帮助您解决问题。