如何单击 Selenium WebDriver 中的隐藏元素?

Posted

技术标签:

【中文标题】如何单击 Selenium WebDriver 中的隐藏元素?【英文标题】:How to click on hidden element in Selenium WebDriver? 【发布时间】:2014-04-02 08:20:46 【问题描述】:

我有一个显示一些记录的网格。当我单击一条记录并检查该元素时,它显示它是隐藏的,但它在网格中是可见的。

我的 html 是:

<a href="http://192.168.1.6/eprint_prod_3.8/settings/othercost_add.aspx?type=edit&id=805" title="Plastic Spiral Bind"
<div style="float: left; width: 99%; overflow: hidden; height: 15px; overflow: hidden"> Plastic Spiral Bind </div>
</a>

上面的代码在检查时是隐藏的,但在网格中是可见的。

硒代码:

driver.findElement(By.partialLinkText("Plastic Spiral Bind")).click();

【问题讨论】:

似乎是一个常见问题解答项目:code.google.com/p/selenium/wiki/…?你需要javascript @Santhosh.S - 您面临的问题是什么? .click() 不起作用吗? 【参考方案1】:

首先将该元素存储在对象中,比如element,然后编写以下代码以单击该隐藏元素:

JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("arguments[0].click();", element);

【讨论】:

我不明白为什么 Selenium 认为我的保存按钮不可见,但你用这个 sn-p 保存了(双关语)我。 谢谢!即使它在屏幕上不可见,我也可以单击该元素。就我而言,它是一种幻灯片类型。该按钮不可见,但存在于 DOM 中。 (isElementDisplayed() 在这种情况下总是返回 true)。 有没有办法模拟双击?我尝试点击两次,但它不起作用【参考方案2】:

您有两种方法。 Selenium 已专门编写为不允许与隐藏元素进行交互。合理的是,如果一个人不能执行该操作,那么 Selenium 也不应该。因此,要通过 Selenium 执行单击,您必须执行用户将执行的操作以使该按钮可见(例如,鼠标悬停事件、单击另一个元素等),然后在可见时执行单击。

但是,Selenium 确实允许您在元素的上下文中执行 Javascript,因此您可以编写 Javascript 来执行点击事件,即使它是隐藏的。

我的偏好是始终尝试执行操作以使按钮可见

【讨论】:

overflow: hidden 并不一定意味着它是隐藏的。 使用伪元素创建自定义样式的单选框和复选框是您需要单击隐藏元素的另一个原因。【参考方案3】:

这是 Python 中的脚本。

您不能单击 selenium 中隐藏的元素。但是,您可以执行 JavaScript 来为您单击隐藏的元素。

element = driver.find_element_by_id(buttonID)
driver.execute_script("$(arguments[0]).click();", element)

【讨论】:

【参考方案4】:
overflow:hidden 

并不总是意味着该元素在 DOM 中隐藏或不存在,它意味着正在修剪不适合该元素的溢出字符。基本上这意味着即使应该显示滚动条也不显示,所以在你的情况下,带有文本的链接

塑料螺旋装订

可能会显示为“Plastic Spir...”或类似名称。所以有可能,这个linkText 确实不存在。

所以你可以试试:

driver.findElement(By.partialLinkText("Plastic ")).click();

或xpath:

//a[contains(@title, \"Plastic Spiral Bind\")]

【讨论】:

【参考方案5】:

我用 jQuery 做到了:

page.execute_script %Q $('#some_id').prop('checked', true) 

【讨论】:

【参考方案6】:

如果&lt;div&gt; 有id 或名称,那么你可以使用find_element_by_idfind_element_by_name

您也可以尝试使用类名、css 和 xpath

find_element_by_class_name
find_element_by_css_selector
find_element_by_xpath

【讨论】:

错误尝试....所提出的答案仅适用于页面上的可见元素,而不适用于隐藏元素。【参考方案7】:

通过 Selenium IDE 使用链接的 XPath 来单击元素:

driver.findelement(By.xpath("//a[contains(@title, \"Plastic Spiral Bind\")]")).click();

【讨论】:

以上是关于如何单击 Selenium WebDriver 中的隐藏元素?的主要内容,如果未能解决你的问题,请参考以下文章

Selenium WebDriver JAVA:如何单击 x,y 坐标?

如何单击 Selenium WebDriver 中的隐藏元素?

如何在 C# 中单击带有 selenium webdriver 的 javascript 确认对话框

如何使用 jQuery 在 Selenium WebDriver 中单击带有 Java 的按钮

如何使用 selenium webdriver 单击此按钮?

如何单击使用 Selenium WebDriver 隐藏的元素?