当我试图通过从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">
答案 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来帮助您解决此类问题的原因之一。