尝试将值绑定到Selenium Java中的输入时出现ElementNotInteractableException

tktrz96b  于 2023-04-04  发布在  Java
关注(0)|答案(2)|浏览(173)

我尝试使用SeleniumJava将一个值绑定到一个输入元素,但我不断收到错误
元素不可交互异常:键盘无法访问元素
我已经尝试了这篇Stack Overflow文章中建议的解决方案:org.openqa.selenium.ElementNotInteractableException: Element is not reachable by keyboard: while sending text to FirstName field in Facebook,但我仍然遇到相同的错误。
任何人都可以请建议任何其他解决方案或潜在的原因,这个错误?

WebElement emailAddyField = driver.findElement(By.id("email"));
emailAddyField.sendKeys(username);

--

<div class="field-two-input-wrapper flex flex-nowrap flex-align-items-stretch flex-item-fluid relative">
    <div class="flex flex-item-fluid">
        <input autocomplete="off" autocapitalize="none" autocorrect="off" spellcheck="false" aria-invalid="false"
               id="email" aria-describedby="id-2" class="field-two-input w100 email-input-field" value="">
    </div>
    <div class="field-two-input-adornment mr0-5 flex flex-align-items-center flex-item-noshrink flex-nowrap flex-gap-0-5">
        <button type="button" aria-expanded="false" aria-live="assertive" aria-atomic="true" aria-invalid="false"
                class="outline-none w100 flex flex-justify-space-between flex-align-items-center flex-nowrap no-pointer-events-children"
                aria-label="proton.me" id="select-domain">
            <span class="flex-item-fluid text-ellipsis text-left">@proton.me</span>
            <svg viewBox="0 0 16 16" class="icon-16p flex-item-noshrink ml0-5" role="img" focusable="false"
                 aria-hidden="true">
                <use xlink:href="#ic-chevron-down-filled"></use>
            </svg>
        </button>
    </div>
</div>

谢谢大家。

db2dz4w8

db2dz4w81#

通常情况下,如果你可以看到控件实际上是可交互的,但你的定位器无法在DOM中找到正确的元素,那么你应该在你之前尝试过的 Package 元素周围单击。
由于input周围只有一个 Package 元素,它与其他input不相关,因此我建议使用以下方法:

WebElement emailAddyField = driver.findElement(By.xpath("//input[@id='email']/parent::div"));
emailAddyField.sendKeys(username);
oknwwptz

oknwwptz2#

终于找到解决方案了。一开始我没有注意到,但是<div>在iframe里面。下面的代码解决了这个问题。

driver.switchTo().frame("frameName");
WebElement emailAddyField = driver.findElement(By.id("email"));
emailAddyField.sendKeys(username);
driver.switchTo().defaultContent();

相关问题