单击一个不起作用的按钮

时间:2014-12-08 13:37:57

标签: java html selenium xpath selenium-webdriver

我使用selenium webdriver和java。

我遇到过一种情况,我可以找到&点击一个按钮,但此后没有任何反应。 所述按钮的HTML代码是>

<div id="divAllButtons" class="UCButtonMainCSS" style="display: none;">
<div>
<div id="OtherActionParent" class="mT8">
<div id="btnSave" class="btn fLt mR20">
<span>
<a onclick="Save_onclick()" href="javascript:void(0)">
<span id="Label24">Save</span>
</a>
</span>
</div>

单击时,按钮应重定向到确认页面,如果未填充mandetory字段,则显示警告消息。 我尝试过很少的东西,

1

Button = driver.findElement(By.id("btnSave"));
Button.click();

2

Button = driver.findElement(By.xpath("//div[@id='dataContainer']/div[2]/div/div/div[4]/div/div[1]/div[2]/span/a"));
Button.click();

第3

Actions action = new Actions(driver);
WebElement we = driver.findElement(By.xpath("//div[@id='dataContainer']/div[2]/div/div/div[4]/div/div[1]/div[2]/span/a"));
action.moveToElement(we).click().build().perform();

4

Point coordinates = driver.findElement(By.xpath("//div[@id='dataContainer']/div[2]/div/div/div[4]/div/div[1]/div[2]/span/a")).getLocation();
Robot robot = new Robot();
robot.mouseMove(coordinates.getX()+40,coordinates.getY()+30);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);

在浏览器的底部显示消息 javascript:void(0)时,每种方式都可以正常工作以点击按钮。

4 个答案:

答案 0 :(得分:1)

尝试基于文本的xpath搜索

基于文本的xpath为我解决了很多问题。您只需确保在单击元素

之前有足够的等待时间

编辑:尝试使用操作

By saveButton = By.xpath("//*[.='Save']");
WebElement element = driver.findElement(saveButton); 
Actions action = new Actions(driver); 
action.moveToElement(element).build().perform(); 
driver.findElement(saveButton).click();

注意:用java编写的未经测试的代码

答案 1 :(得分:1)

尝试使用此代码点击保存按钮,看看它是否有效:

WebElement Button = driver.findElement(By.xpath("//div[@id='btnSave]//a"));
Button.click();

OR

WebElement Button = driver.findElement(By.xpath("//div[@id='btnSave]//span[.='Save']"));
Button.click();

答案 2 :(得分:1)

试试javascript执行者。它可能会起作用....

WebElement save = driver.findElement(By.id("btnSave")); JavascriptExecutor executor = (JavascriptExecutor)driver; executor.executeScript("arguments[0].click();", save);

答案 3 :(得分:0)

问题解决了。 问题不在于找到元素,而是onClick()事件没有被触发。然后我发现还有其他东西从事件中停止了。我曾使用java脚本启用日期选择器框&amp;这样做了,

((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();
   }

}

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

谢谢你们的帮助。 .cheers !!!