Selenium WebDriver, нажимая на скрытый элемент
Привет. Я хотел бы знать, как нажимать на скрытый элемент и/или отключать элемент, используя Selenium WebDriver.
Я знаю с селеном 1, я могу сделать это, как показано ниже:
selenium.click(id="idOfHiddenField");
и это сработает, но с селеном 2 (WebDriver) этого не происходит. Я не хочу использовать jquery для включения или отображения скрытых полей или JavaScript. Это связано с тем, что большая часть теста использует xpath.
Или мне просто нужно остаться со старым селеном, который позволяет вам нажимать на скрытые поля?
Ответы
Ответ 1
Существует более простой способ обойти проблему, используя JavascriptExecutor
.
Например:
document.getElementsByClassName('post-tag')[0].click();
Вышеуказанный javascript щелкнул по тегу "Selenium" в правом верхнем углу этой страницы (рядом с вашим вопросом), даже если он был скрыт (гипотетически).
Все, что вам нужно сделать, это выполнить эту инструкцию JS через интерфейс JavascriptExecutor
, например:
(JavascriptExecutor(webdriver)).executeScript("document.getElementsByClassName('post-tag')[0].click();");
Для выполнения действия click это будет использовать песочницу JS и синтетическое событие click. Несмотря на то, что он поражает цель симуляции пользовательской активности WebDriver, вы можете использовать его в сценариях ниши, например, в вашем случае, для хорошего эффекта.
Ответ 2
есть один ответ, но несколько предложений:
Ответ: используйте selenium backed driver, чтобы нажать на скрытый элемент, используя что-то вроде
Selenium selenium = new WebDriverBackedSelenium(driver, baseUrl);
selenium.clickAt("xpath=//area[@alt='Mercury']", clickPoint);
Предложение 1: создать фальшивые данные специально, если есть много, которые нужно создать, и вы ищете FOSS для JMeter.
Предложение2: проверить, отключен ли javascript, отключить javascript в самом экземпляре firefox, например.
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setJavascriptEnabled(false);
Ответ 3
Это может не соответствовать вашим потребностям, но другим решением для некоторых может быть изменение CSS для скрытия элемента.
Пока Selenium не найдет элемент с display: none;
, он найдет элемент со следующим:
.hide {
position: absolute;
top: -99em;
left: -99em;
}
Затем вместо использования jQuery.show/hide/toggle
в вашем приложении вы должны использовать jQuery.toggleClass('hide', true/false/unset_to_toggle)
.