Получение ошибки ElementNotInteractableException в Selenium Java - PullRequest
0 голосов
/ 07 июня 2019

Я получаю эту ошибку, когда пытаюсь ввести текст в текстовое поле, извлекая данные из листа 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 голосов
/ 10 июня 2019

Я собираюсь сделать предположение на основе предоставленной информации.Я предполагаю, что вы пытаетесь использовать объекты страницы с помощью реализации 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, хотя у вас есть некоторое дублирование кода.Это одна из причин, по которой я создал свою библиотеку запросов , которая помогает вам обойти подобные проблемы.

0 голосов
/ 07 июня 2019

Проверьте, является ли элемент неразрешимым. 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...