datepicker + webdriver +无法识别元素

时间:2013-05-12 08:02:14

标签: selenium webdriver

在我的应用程序中,我有一个文本框,当我点击时带来日期选择器来选择日期。一种方法是从datepicker中选择日期,或者你可以在日期中手动发送。但每当我发送日期时,它都说无法找到该元素。

这是将日期发送到文本框的代码

driver.findElement(By.xpath(".//*[@id='txtdateFrom']")).sendKeys("03/05/2013");

它会抛出以下错误

org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"xpath","selector":".//*[@id='txtdateFrom']"}
Command duration or timeout: 15 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '2.31.0', revision: '1bd294d', time: '2013-02-27 20:52:59'
System info: os.name: 'Windows 8', os.arch: 'x86', os.version: '6.2', java.version: '1.7.0_17'
Session ID: 3eea4ac2-2b38-4688-9733-8734077f7d3e
Driver info: org.openqa.selenium.firefox.FirefoxDriver

我没有权利添加屏幕截图。 请帮忙!!

请找到下面的HTML

<input id="txtdateFrom" class="textbox hasDatepicker" type="text" style="color:Gray;" name="txtdateFrom">

请找到iframe HTMl

<iframe width="100%" scrolling="auto" height="493" frameborder="1" style="vertical-align: top;" allowtransparency="true" id="ContentMain" src="../Report/AuditorAssignmentReportSearch.aspx?Width=100&amp;Height=528"></iframe>

单击文本字段的DOM将填充datepicker

  attributes
    [type="text", style="color:Gray;", 2 more...]

0
    type="text"

1
    style="color:Gray;"

2
    class="textbox hasDatepicker"

3
    id="txtdateFrom"

4
    name="txtdateFrom"

,这是单击文本字段后的日期选择器的属性

attributes
    [class="ui-datepicker-header ui-widget-header ui-helper-clearfix ui-corner-all"]

0
    class="ui-datepicker-header ui-widget-header ui-helper-clearfix ui-corner-all"

更新了DOM

attributes
    [onclick="DP_jQuery_1368459704950.datepicker._selectDay('#txtdateFrom',4,2013, this);return false;", class=

"  ui-datepicker-today"

]

0
    onclick="DP_jQuery_1368459704950.datepicker._selectDay('#txtdateFrom',4,2013, this);return false;"

3 个答案:

答案 0 :(得分:0)

最简单的方法是尝试driver.findElement(By.xpath(“.//* [@ id ='txtdateFrom']”))。click()。sendKeys(“03/05/2013”​​); 尽管sendKeys隐含地执行了此操作,但有时在sendKeys()之前单击进入Inputfield是非常有用的,这是我的经验。此外这个xpath是好的,但似乎是从firepath复制和粘贴。我建议你使用//输入[@ id ='txtdateFrom']。所以它更具可读性。

答案 1 :(得分:0)

在我看来,你应该使用js executor:

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.document.getElementById('txtdateFrom').setAttribute('value', '03/05/2013');");

属性可能不同,您应该在DOM中搜索它。

或者可能是selenium不等待元素而无法找到它。你能在不发送密钥的情况下找到这个元素吗?

答案 2 :(得分:0)

首先感谢您的支持和所有建议。问题在于浏览器兼容性。我们的应用程序仅在IE 8中工作。我一直在使用IE 9.当我在IE 8中检查我的代码时,它工作得很好,并且能够输入日期。谢谢大家!!