一次img WebElement
点击会失败,即使该元素会被点击,它仍然声称该元素不可点击。
我有一个对话框,其中包含一些按钮(其中带有img X的关闭按钮)。
当我尝试通过单击img的WebElement
单击关闭对话框时,很少会得到如下的WebDriverException
:
原因:org.openqa.selenium.WebDriverException:未知错误:元素
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfhCB8QKRBsEUJwAAAAn0lEQVQoz72RMQ7CMAwADwbgCSyhqmDpFj6AWqSOfIoH8BkGNsLGhiwG6NKJDvwBBoaExPCAeontu0SWA32F1HKTRawyucjK58PQ21LgvCIZjiU7DwbhzpQjBR0lbxw5LaXtlKCUl8ZKiAoapxkARkzCOU7NKMiMEzktdwxO5n9CxBVrGq18Xzh4bB/2SUWDYf+7qI1cxaRx5Sx1b7/0AYDRNbDgNXvDAAAAAElFTkSuQmCC" class="gwt-Image" style="visibility: visible;">
在点(834,307)不可单击。其他元素将获得点击:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfhCB8QKRBsEUJwAAAAn0lEQVQoz72RMQ7CMAwADwbgCSyhqmDpFj6AWqSOfIoH8BkGNsLGhiwG6NKJDvwBBoaExPCAeontu0SWA32F1HKTRawyucjK58PQ21LgvCIZjiU7DwbhzpQjBR0lbxw5LaXtlKCUl8ZKiAoapxkARkzCOU7NKMiMEzktdwxO5n9CxBVrGq18Xzh4bB/2SUWDYf+7qI1cxaRx5Sx1b7/0AYDRNbDgNXvDAAAAAElFTkSuQmCC" class="gwt-Image" style="visibility: visible;">
如您所见,元素是相同的。我开始怀疑该元素的陈旧性,其启用性,甚至怀疑该元素moves的可能性。
下面是一个代码段,其中包含调试信息,我将在其中进行解释。
private static final By X_BUTTON__SELECTOR
= WlSeleniumUtils.selectTagWithClass("img", "gwt-Image");
public void clickAndReturnIfAny() {
WebElement closeImage = manageWorkspaceDialogWebElem
.findElement(X_BUTTON__SELECTOR);
// print the elements location before clicking
System.out.println(String.format
("Position: %s, Dimensions: %s",
closeImage.getLocation() + "",
closeImage.getSize() + ""));
try {
// print check for staleness and enablement.
System.err.println
("close button: stale? "
+ driverHelper.isStale(closeImage)
+ " displayed? " + closeImage.isDisplayed()
+ " enabled? " + closeImage.isEnabled()
+ " clickable? " + (ExpectedConditions
.elementToBeClickable
(closeImage)
.apply(driverHelper.getDriver())
!= null));
closeImage.click();
}
catch (WebDriverException wde) {
System.err.println
("Faied to click manage-workspaces dialog's "
+ "close button: stale? "
+ driverHelper.isStale(closeImage)
+ " displayed? " + closeImage.isDisplayed()
+ " enabled? " + closeImage.isEnabled()
+ " clickable? " + (ExpectedConditions
.elementToBeClickable
(closeImage)
.apply(driverHelper.getDriver())
!= null));
// print the entire HTML content to check for multiple img tags.
System.err.println
(manageWorkspaceDialogWebElem.getAttribute("innerHTML"));
// fetch the element again and check its location
closeImage = manageWorkspaceDialogWebElem
.findElement(X_BUTTON__SELECTOR);
System.out.println(String.format
("Position: %s, Dimensions: %s",
closeImage.getLocation() + "",
closeImage.getSize() + ""));
throw new RuntimeException
("Failed to close mange-workspaces dialog.", wde);
}
}
执行点击之前:
位置:(826,299),尺寸:(16,16)
关闭按钮:过时了吗?错误显示?真启用?真正可点击?是
执行点击并捕获异常后:
位置:(826,299),尺寸:(16,16)
因此元素没有移动。
如您所见,内部HTML只是一张img:
<div class="popupContent">
<table cellspacing="0" cellpadding="0" style="background-color: rgb(255, 255, 255); width: 100%; height: 100%;">
<tbody>
<tr>
<td align="right" style="vertical-align: top;"><button type="button" class="wl-popup-close-button" style="border-style: none; outline-style: none; background-color: rgb(255, 255, 255); padding: 0px;"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfhCB8QKRBsEUJwAAAAn0lEQVQoz72RMQ7CMAwADwbgCSyhqmDpFj6AWqSOfIoH8BkGNsLGhiwG6NKJDvwBBoaExPCAeontu0SWA32F1HKTRawyucjK58PQ21LgvCIZjiU7DwbhzpQjBR0lbxw5LaXtlKCUl8ZKiAoapxkARkzCOU7NKMiMEzktdwxO5n9CxBVrGq18Xzh4bB/2SUWDYf+7qI1cxaRx5Sx1b7/0AYDRNbDgNXvDAAAAAElFTkSuQmCC" class="gwt-Image" style="visibility: visible;"></button></td>
</tr>
</tbody>
</table>
</div>
因此,对于为什么发生这种情况的任何建议将不胜感激。
答案 0 :(得分:0)
尝试使Java脚本执行器单击带有以下xpath的元素。
WebElement element=driver.findElement(By.xpath("//button[@class='wl-popup-close-button']/img[@class='gwt-Image']"));
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].click();", element);
答案 1 :(得分:0)