当前位置: 首页 > 知识库问答 >
问题:

当元素是同一个元素时,是什么原因导致元素不能被点击?

林劲
2023-03-14

imgWebElement单击很少会失败,即使要获得单击的元素是相同的,也不会声称该元素不可单击。

我有一个对话框,包含一些按钮(关闭按钮与img X在里面)。

如您所见,元素是相同的。我开始怀疑这个元素的陈旧性,它的支持性,甚至元素移动的可能性。

下面是一个代码片段,其中包括调试消息,我将解释。

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

在执行单击之前:

正如您所看到的,内部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>

因此,任何关于为什么会发生这种情况的建议都将非常感谢。

共有1个答案

富凯风
2023-03-14

尝试诱导java Scripts executor单击下面的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);
 类似资料:
  • 问题内容: 为什么我们永远不能将元素作为元素的子元素? 我用以下代码制作了一个网页 在这里,元素是p元素的子元素。但是,在所有主流浏览器(Chrome,Firefox和Internet Explorer-所有最新版本)中,其解释如下 我通过右键单击元素(在Chrome中)并选择检查元素选项来对其进行检查。我在Chrome中看到了它,但是其他两个浏览器的行为也相同(CSS选择器“ p ul”无法正常

  • 我是最新的办公室编程人员。我找不到任何描述运行中可能放置多少文本元素的文档。例如,我生成了这个xml,并将其直接放到“document.xml”中: 文档打开时没有错误。但在MS Word中保存文档后,此xml将替换为: 我的问题:用户有没有办法生成几个

  • 问题内容: 我正在试验粘性导航,但遇到了问题。问题是,当我将导航栏放在其他元素中时,它不再具有粘性。 问题答案: 粘性位置考虑父元素的行为。在您的情况下,父元素的高度由sticky元素定义,因此该元素没有粘性。 添加边框以更好地查看问题: 现在将高度添加到父元素,看看发生了什么: 粘性行为很好,因为父元素上有足够的高度,可以在特定阈值之后固定该元素。 粘性放置的元素是其计算的位置值为粘性的元素。它

  • Selenium webdriver版本-2.52.0 同样的测试用例在windows操作系统和firefox中运行良好

  • 我正在使用selenium测试脚本。我得到以下错误和这个错误随机发生。当我跑10次时,我会得到大约两次。所以它不是真的可复制的。有人知道为什么会这样吗?我试图单击的元素在浏览器中绝对可见,并且不会四处移动,因此不需要调整大小或拖动元素。我正在使用chrome webdriver,我阅读了其他故障排除策略(调试“Element is not clickable at point”错误),它们似乎与我

  • 当单击的elemenet是父元素的最后一个子元素时,我要显示报警。我的HTML结构: 在本例中,我希望在单击该元素(父行的最后一个元素)时显示报警: 我知道我可以使用这样的somethink获得最后一个元素(但我不能在我的例子中使用这个): 我想试着做这样的事,但每次都是假的