您好,我想知道如何使用Selenium WebDriver单击隐藏的元素和/或禁用元素。
我知道在Selenium 1中可以像下面这样做:
selenium.click(id="idOfHiddenField");
这种方法在selenium 1中有效,但是在selenium 2(WebDriver)中不起作用。我不想使用jQuery启用或显示隐藏字段,也不想使用JavaScript,因为大多数测试都使用XPath。 那么我只能继续使用旧版本的selenium来单击隐藏字段了吗?
您好,我想知道如何使用Selenium WebDriver单击隐藏的元素和/或禁用元素。
我知道在Selenium 1中可以像下面这样做:
selenium.click(id="idOfHiddenField");
这种方法在selenium 1中有效,但是在selenium 2(WebDriver)中不起作用。我不想使用jQuery启用或显示隐藏字段,也不想使用JavaScript,因为大多数测试都使用XPath。 那么我只能继续使用旧版本的selenium来单击隐藏字段了吗?
使用JavascriptExecutor
有一种更简单的方法来解决这个问题。
例如:
document.getElementsByClassName('post-tag')[0].click();
即使" Selenium "标签被隐藏(假设),上面的JavaScript也将单击此页面右上方的" Selenium "标签。
您只需要通过JavascriptExecutor
接口发出这个JS指令,就像这样:
(JavascriptExecutor(webdriver)).executeScript("document.getElementsByClassName('post-tag')[0].click();");
这将使用JS沙盒和合成的点击事件来执行点击操作。虽然它违背了WebDriver用户活动模拟的目的,但在像您这样的特定场景中,可以有效地使用它。
有一个答案但有多个建议:
答案:使用Selenium支持的驱动程序,使用类似以下方式单击隐藏元素
Selenium selenium = new WebDriverBackedSelenium(driver, baseUrl);
selenium.clickAt("xpath=//area[@alt='Mercury']", clickPoint);
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setJavascriptEnabled(false);
:javascriptEnabled => true
,对吧? - Aravin也许它不能满足您的需求,但对于其他人来说,另一个解决方案可能是修改 CSS 来隐藏元素。
尽管 Selenium 无法找到 display: none;
元素,但它会找到以下元素:
.hide {
position: absolute;
top: -99em;
left: -99em;
}
那么,你的应用程序中不再使用jQuery.show/hide/toggle
,而是使用jQuery.toggleClass('hide', true/false/unset_to_toggle)
。