Selenium WebDriver:无法选择元素

<input type="text" id="mobile" name="mobile" placeholder="Mobile Number" maxlength="10" value="" onkeyup="javascript:dispLocMob(this);" onkeydown="javascript:dispLocMob(this);" onchange="javascript:dispLocMob(this);">

上面显示的是我正在尝试发送密钥的元素 . 我试过xpath和id以及各种选择器,但它会抛出一个错误,如下所示:

无法定位元素:{“method”:“xpath”,“selector”:“/ html / body / div [3] / div / form / div [2] / div [1] / input”}命令持续时间或超时:338毫秒有关此错误的文档,请访问:http://seleniumhq.org/exceptions/no_such_element.html构建信息:版本:'2.53.0',修订版:'35ae25b',时间:'2016-03- 15 16:57:40'系统信息:主机:'ClaimsCM8',ip:'192.168.110.118',os.name:'Windows 8',os.arch:'x86',os.version:'6.2',java .version:'1.7.0_51' ***元素信息:{Using = xpath,value = / html / body / div [3] / div / form / div [2] / div [1] / input}会话ID: ec543fff-7116-4880-8c98-7c60a1c697d0驱动信息:org.openqa.selenium.firefox.FirefoxDriver能力[{平台= WINDOWS,acceptSslCerts =真,javascriptEnabled =真,cssSelectorsEnabled =真,databaseEnabled =真,browserName =火狐,handlesAlerts = true,nativeEvents = false,webStorageEnabled = true,rotate = false,locationContextEnabled = true,applicationCacheEnabled = true,takesScreenshot = true,version = 45.0.2}] at sun.reflec t.NativeConstructorAccessorImpl.newInstance0(本地方法)在sun.reflect.NativeConstructorAccessorImpl.newInstance(来源不明)在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(来源不明)在java.lang.reflect.Constructor.newInstance(来源不明)在组织 . openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206)在org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158)在org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver . 的java:678)在org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:363)在org.openqa.selenium.remote.RemoteWebDriver.findElementByXPath(RemoteWebDriver.java:500)在org.openqa.selenium.By $ ByXPath.findElement(By.java:361)位于Selenium.Test2.main(Test2.java:62)的org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:355)引起:org.openqa . selenium.NoSuchElementException:无法定位元素:{“method”:“xpath”,“selector”:“/ html / body / d iv [3] / div / form / div [2] / div [1] / input“}有关此错误的文档,请访问:http://seleniumhq.org/exceptions/no_such_element.html构建信息:版本:' 2.53.0',修订版:'35ae25b',时间:'2016-03-15 16:57:40'系统信息:主机:'ClaimsCM8',ip:'192.168.110.118',os.name:'Windows 8' ,os.arch:'x86',os.version:'6.2',java.version:'1.7.0_51'驱动程序信息:driver.version:未知.FirefoxDriver.prototype.findElementInternal_(file:/// C:/在.FirefoxDriver.prototype.findElement的用户/EFERNA〜1 / AppData / Local / Temp / anan4369679942726534324webdriver-profile/extensions/fxdriver@googlecode.com/components/driver-component.js:10770)(file:/// C:/ Users/EFERNA~1/AppData/Local/Temp/anonymous4369679942726534324webdriver-profile/extensions/fxdriver@googlecode.com/components/driver-component.js:10779)在.DelayedCommand.prototype.executeInternal_ /小时(文件:/// C :/Users/EFERNA~1/AppData/Local/Temp/anonymous4369679942726534324webdriver-profile/extensions/fxdriver@googlecode.com/components/comman d-processor.js:12661)在.DelayedCommand.prototype.executeInternal_(文件:/// C:/Users/EFERNA~1/AppData/Local/Temp/anonymous4369679942726534324webdriver-profile/extensions/fxdriver@googlecode.com/components/ command-processor.js:12666)at .DelayedCommand.prototype.execute / <(file:/// C:/Users/EFERNA~1/AppData/Local/Temp/anonymous4369679942726534324webdriver-profile/extensions/fxdriver@googlecode.com/组件/命令processor.js:12608)

是否在Web元素中定义了一些不允许我访问Selenium脚本中元素的内容?任何建议/意见将受到高度赞赏 . 谢谢!

回答(3)

2 years ago

请尝试以下方法: -

WebDriverWait wait = new WebDriverWait(driver, 10);
el = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("mobile")));
el.sendKeys("your value");

Note : - 在 finding element 之前确保它不在任何 frameiframe 内 . 如果它在任何 frameiframe 内,您需要先将 frame 切换为: - driver.switchTo().frame("frame name or id")

希望它会帮助你...... :)

2 years ago

首先,如果您使用的是xpath,则使用相对xpath而不是绝对值,因为DOM中的轻微更改会使绝对xpath无效或引用错误的元素 .

第二次尝试使用.click();在.sendkeys();之前 . 所以你的代码可能是这样的

WebElement ele = dvr.findElement(By.id("mobile"));
ele.click();
ele.sendKeys("your string");

最后,请确保页面上没有任何具有相同属性的重复元素,即id ==“mobile” . 希望这个帮助

2 years ago

请尝试以下代码:

  • 如果元素不在任何框架中:

driver.findElement(By.id("mobile")).sendKeys("");

  • 如果元素在框架内:

// Switching to the frame

driver.switchTo().frame(<framename>);

driver.findElement(By.id("mobile")).sendKeys("");

driver.switchTo().defaultContent();

此外,请在启动页面并输入文本后添加一些等待 . 即使代码不起作用,请使用以下代码检查元素是否可见:

if(driver.findElement(By.id("mobile")).isDisplayed()) {
   // Add the code given above
}

希望这可以帮助