在Selenium Java中获取ElementNotInteractableException错误

时间:2019-06-07 12:22:54

标签: java selenium selenium-webdriver

当我试图通过从Excel工作表中获取数据来向文本字段输入文本时,出现此错误。

Error Message : Error while entering the text in DOM! Element <input id="Name" class="flipperMozEdit" name="Name" type="text"> is not reachable by keyboard
Build info: version: '3.5.3', revision: 'a88d25fe6b', time: '2017-08-29T12:54:15.039Z'
System info: host: 'G5CG7133385E', ip: '10.181.210.46', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_212'
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{moz:profile=C:\Users\502457528\AppData\Local\Temp\rust_mozprofile.6Sn2RalXsr0R, rotatable=false, timeouts={implicit=0, pageLoad=300000, script=30000}, pageLoadStrategy=normal, moz:headless=false, platform=XP, moz:accessibilityChecks=false, moz:useNonSpecCompliantPointerOrigin=false, acceptInsecureCerts=true, browserVersion=62.0.3, platformVersion=10.0, moz:processID=14160, browserName=firefox, javascriptEnabled=true, platformName=XP, moz:webdriverClick=true}]
Session ID: 1ea9a987-f329-464f-adac-af2b92064a1d

我尝试了以下代码: 元素

    <input type="text" value="" name="Name" id="Name" onfocus="FullSearch.displayDynamicTextarea(this)" size="30%" delimiter="|" class="flipperMozView">

    @FindBy(xpath = ".//*[@id='Name']")
    public WebElement txt_NameMR;


    BaseClass.waitForObj(10000);
    BaseClass.set(txt_NameMR,ExcelReport.testData.get("ownerName")+"*");
    BaseClass.waitForObj(5000);
    BaseClass.click(btn_Srch_Name);

这是txt_NameMR的元素

<input type="text" value="" name="Name" id="Name" onfocus="FullSearch.displayDynamicTextarea(this)" size="30%" delimiter="|" class="flipperMozView">

2 个答案:

答案 0 :(得分:0)

检查元素是否难处理。 txt_NameMR.click(); //这通常会激活DOM中的元素。

  BaseClass.waitForObj(10000);
     txt_NameMR.click();   BaseClass.set(txt_NameMR,ExcelReport.testData.get("ownerName")+"*");
        BaseClass.waitForObj(5000);
        BaseClass.click(btn_Srch_Name);

答案 1 :(得分:0)

我将根据提供的信息进行猜测。我假设您正在尝试通过Java PageFactory实现使用页面对象,所以我认为您需要以下内容。

页面对象

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class MyPageObject {
    @FindBy(id = "Name")
    WebElement txt_NameMR;

    @FindBy(id = "<ID_OF_Search_Button>")
    WebElement btn_Srch_Name;

    WebDriverWait wait;

    public MyPageObject(WebDriver driver) {
        PageFactory.initElements(driver, this);
        wait = new WebDriverWait(driver, 15, 100);
    }

    public void searchFor(String text){
        wait.until(ExpectedConditions.elementToBeClickable(txt_NameMR)).sendKeys(text);
        wait.until(ExpectedConditions.elementToBeClickable(btn_Srch_Name)).click();
    }
}

主代码(调用页面对象)

MyPageObject myPageObject = new MyPageObject(driver);
myPageObject.searchFor(ExcelReport.testData.get("ownerName")+"*");

现在您可能在这里等待仍然有问题,页面对象将等待直到元素可单击为止,但是由于显式等待正在获取WebElement,因此如果您在页面上没有该元素,触发显式等待,您将看到NoSuchElement异常。您可以使用更具针对性的显式等待来解决此问题,例如:

wait.until(ExpectedConditions.presenceOfElementLocated(By.id("Name")));

尽管没有简单的方法从Java PageFactory WebElement中获取定位符(按对象),所以您需要进行一些代码重复。这是我创建Query library来帮助您解决此类问题的原因之一。