WebDriver无法单击具有onclick = function1()作为属性的输入元素

时间:2013-03-27 12:06:22

标签: java webdriver selenium-webdriver

我正在使用带有Java的Web驱动程序2.31。似乎Web驱动程序无法对具有onclick()属性的输入元素执行单击操作。

我需要执行点击操作的输入元素具有以下属性 - id(随机生成的数字),classtype=buttononclickonmouseoutonmouseovertitlevalue

我可以获取titlevalue属性的值,这意味着Web驱动程序能够识别输入元素,但无法对其执行单击操作。

我尝试了以下内容:

  1. webdriver.findElement(By.xpath("xpath for the input")).click()
  2. webdriver.findElement(By.xpath("xpath for the input")).sendKeys(Keys.ENTER);
  3. new Actions(webdriver).moveToElement(webdriver.findElement(By.xpath("xpath for the input"))).click().perform();
  4. 以上选项均无效。

2 个答案:

答案 0 :(得分:0)

你是否从element.click()得到任何例外?它启用并可见?我们遇到的问题之一是WebDriver没有正确处理位置:静态元素,所以在播放期间它会覆盖按钮(你不会在屏幕截图上看到它)并且会抛出异常“元素在点上无法点击”

我们遇到了与元素类似的问题,并且有下面的代码有时会工作(但也不是100%):

element.click();
if("button".equals(tagName)) {
    if(element.isEnabled() && element.isDisplayed())
        element.sendKeys(Keys.ENTER);
}

但是在升级WebDriver之后问题就消失了,我们删除了sendKeys(ENTER),它在2.29.0中运行良好。

答案 1 :(得分:0)

我在项目中遇到了完全相同的问题。 问题不是找到元素,而是onClick()事件没有触发。 然后我发现其他东西在那里停止了事件发生。我曾使用java脚本启用日期选择器框&这样做了,

((JavascriptExecutor)driver).executeScript ("document.getElementById('txtOriginDate').removeAttribute('readonly',0);");

WebElement originDateBox= driver.findElement(By.xpath(prop.getProperty("originDateBox")));
originDateBox.clear();
originDateBox.sendKeys("9-Dec-2014"); //Enter date  

开发人员以这样的方式设计它:如果您不使用日期选择器来选择日期,则不会设置特定变量。 最终使** onclick 事件无法解雇。

日期选择器代码是这样的,

var jsoncustdate = "";
var jsonorigindate = "";

function onSelectCalender( StrDt, obj ) 
{
    if ( !varReadonly ) {
    if ( $( "#txtCustDescisionDate" ).attr( "IsDisable" ) == "FALSE" ) 
    {
        if ( obj.id == "txtCustDescisionDate" ) 
        {
            custobjDt = new Date( obj.selectedYear, obj.selectedMonth,obj.selectedDay, 0, 0, 0, 0 );
            jsoncustdate = custobjDt.getTime();
            jsoncustdate = "\/Date(" + jsoncustdate + ")\/";
            DisabledBtnStage();
            //        $("#txtFromDate").datepicker("option", "maxDate", objDt);

        }
        if ( obj.id == "txtOriginDate" ) 
        {
            var objDt = new Date( obj.selectedYear, obj.selectedMonth,obj.selectedDay,0, 0,0,0 );
            jsonorigindate = objDt.getTime();
            jsonorigindate = "\/Date(" + jsonorigindate + ")\/";
            DisabledBtnStage();
            //        $("#txtToDate").datepicker("option", "minDate", objDt);
        }
    }
    elogCommon.CheckMandatory();
  }

}

我终于以正常方式使用了日期选择器&事件顺利开始。

我希望这个答案会有所帮助。 .cheers !!!