11

您好我想知道如何使用 Selenium WebDriver 单击隐藏元素和/或禁用元素。

我知道使用 selenium 1 我可以这样做:

selenium.click(id="idOfHiddenField");

这会起作用,但是对于 selenium 2 (WebDriver),这不起作用。我不想使用 jquery 来启用或显示隐藏字段或 JavaScript。这是因为大多数测试都使用 xpath。

还是我只需要使用旧的 selenium,它可以让你点击隐藏的字段?

4

3 回答 3

16

有一种更简单的方法可以使用JavascriptExecutor.

例如:

document.getElementsByClassName('post-tag')[0].click();

上面的 javascript 会点击此页面右上角的“Selenium”标签(在您的问题旁边),即使它被隐藏(假设地)。

您需要做的就是通过如下JavascriptExecutor界面发出这条 JS 指令:

(JavascriptExecutor(webdriver)).executeScript("document.getElementsByClassName('post-tag')[0].click();");

这将使用 JS 沙箱和合成点击事件来执行点击操作。尽管它违背了 WebDriver 用户活动模拟的目的,但您可以在小众场景中使用它,例如在您的案例中效果良好。

于 2012-08-21T06:18:44.057 回答
1

有一个答案,但有多个建议:

答案:使用 selenium 支持的驱动程序单击隐藏元素,使用类似的东西

Selenium selenium = new WebDriverBackedSelenium(driver, baseUrl);
selenium.clickAt("xpath=//area[@alt='Mercury']", clickPoint);

建议1:如果要创建很多并且您正在寻找FOSS,请专门创建假数据,请选择JMeter。

建议2:检查javascript已关闭禁用Firefox实例本身的javascript,例如

DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setJavascriptEnabled(false);
于 2012-08-20T20:43:13.883 回答
0

它可能不符合您的需求,但对于某些人来说,另一种解决方案可能是更改 CSS 以隐藏元素。

虽然 Selenium不会找到具有以下内容的元素,display: none;但它找到具有以下内容的元素:

.hide {
    position: absolute;
    top: -99em;
    left: -99em;
}

然后jQuery.show/hide/toggle,您将使用jQuery.toggleClass('hide', true/false/unset_to_toggle).

于 2013-10-09T15:06:22.253 回答