首页 > 解决方案 > 如何使用 selenium-webdriver 和 Java 单击日历图像图标

问题描述

我尝试了很多方法,但它对我不起作用。请帮忙

DOM 区域:

<td>
<input name="ctl00$cntMainContent$txtStartDate" type="text" id="ctl00_cntMainContent_txtStartDate" class="clsTextBox" onkeydown="javascript:return false;" onpaste="javascript:return false;">                                
<img id="ctl00_cntMainContent_imgStartDate" src="../Images/calendar.gif" align="absbottom">
</td>

以下是我尝试过的区域, 正常点击方法:

driver.findElement(By.xpath("//*[@id='ctl00_cntMainContent_imgStartDate']")).click();

Javascript执行器:

public void Javascript_Click()
    {           
        JavascriptExecutor executor= (JavascriptExecutor)driver;            executor.executeScript("document.getElementById('ctl00_cntMainContent_imgStartDate').click()");     
    } 

行动:

public void Action_Click()
        {
            Actions act = new Actions(driver);          act.moveToElement(driver.findElement(By.id("ctl00_cntMainContent_imgStartDate"))).click().build().perform();
        }

标签: javaseleniumxpathcss-selectorswebdriverwait

解决方案


由于该元素是启用了JavaScript的元素,因此click()您需要在该元素上使用WebDriverWait并且elementToBeClickable()您可以使用以下任一Locator Strategies

  • 选择器

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("td img[id$='cntMainContent_imgStartDate'][src$='Images/calendar.gif']"))).click();
    
  • 路径

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//td//img[contains(@id, 'cntMainContent_imgStartDate') and contains(@src, 'Images/calendar.gif')]"))).click();
    

推荐阅读