Подтвердить что ты не робот

Selenium WebDriver, нажимая на скрытый элемент

Привет. Я хотел бы знать, как нажимать на скрытый элемент и/или отключать элемент, используя Selenium WebDriver.

Я знаю с селеном 1, я могу сделать это, как показано ниже:

selenium.click(id="idOfHiddenField");

и это сработает, но с селеном 2 (WebDriver) этого не происходит. Я не хочу использовать jquery для включения или отображения скрытых полей или JavaScript. Это связано с тем, что большая часть теста использует xpath.

Или мне просто нужно остаться со старым селеном, который позволяет вам нажимать на скрытые поля?

4b9b3361

Ответ 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).