java - 如何使用 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();
}
解决方案
由于该元素是启用了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();
推荐阅读
- javascript - 带有隐藏的表格 - 结果为 0 时显示按钮
- git - .hprof 文件阻止我推送到 GitHub,尽管它不存在
- node.js - Node async await 代码编写风格哪一种好且优化
- android - 在 AndroidX 中取代 appcompat-v7 的是什么
- regex - 从包含多个 id 的响应中获取第一个“id”的正则表达式是什么?
- laravel - 模板中的模型函数调用
- perl - 使用 awk 为每个字段插入引号
- image - ImageMagick 比较 2 张图像,在输出图像上标有 2 种不同的颜色
- ionic-framework - 如何在 IONIC 4 中手动删除插页式谷歌广告
- vba - 循环遍历具有指定列号的数组中的列