Selenium 2.0
Разработчики в хелпе пишут, что webdriver работает только с теми контролами, которые реально видит пользователь. Но можно попробовать дожидаться появления элемента через WebDriverWait реализацию. Пример простого теста ниже
```java package com.test.webdriver;import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.Wait;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
public class ClassTest {
private WebDriver driver;
@BeforeTest
public void setUp() {
driver = new FirefoxDriver();
}
@Test
public void testTest() throws InterruptedException {
driver.get("http://www.google.com.ua");
Wait<WebDriver> wait = new WebDriverWait(driver, 10);
WebElement hiddenElement = wait.until(elementPresentLocatedBy(By.id("wgjc")));
System.out.println(hiddenElement.getAttribute("style"));
}
@AfterTest
public void tearDown() {
driver.quit();
}
private ExpectedCondition<WebElement> elementPresentLocatedBy(final By webElement) {
return new ExpectedCondition<WebElement>() {
@Override
public WebElement apply(WebDriver arg0) {
WebElement element = driver.findElement(webElement);
if (element.getTagName() != null) {
return element;
}
return null;
}
};
}
}
Можно попробывать переопределить метод getElement для hidden елементов дома которые присудствуют в DOM
```java /** * */ package org.openqa.selenium.htmlunit;
import org.openqa.selenium.RenderedWebElement;
import org.openqa.selenium.WebElement;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
/**
- @author oleksiizozulenko
*/
public interface ObbRenderedWebElement extends RenderedWebElement, WebElement {
public HtmlElement getElement();
}
package org.openqa.selenium.htmlunit;
import org.openqa.selenium.ElementNotVisibleException;
import org.openqa.selenium.RenderedWebElement;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
import org.openqa.selenium.htmlunit.RenderedHtmlUnitDriverWebElement;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlHiddenInput;
/**
- @author oleksiizozulenko
*/
public class ObbHtmlUnitRenderedWebElement extends
RenderedHtmlUnitDriverWebElement implements ObbRenderedWebElement {
static RenderedHtmlUnitDriverWebElement instance;
/**
* @param parent
* @param element
*/
public ObbHtmlUnitRenderedWebElement(HtmlUnitDriver parent,
HtmlElement element) {
super(parent, element);
}
public static RenderedHtmlUnitDriverWebElement getInstance(RenderedWebElement obj)
{
instance = (RenderedHtmlUnitDriverWebElement) obj;
return instance;
}
public static void selectOption(RenderedWebElement obj)
{
instance = (RenderedHtmlUnitDriverWebElement) obj;
instance.assertElementNotStale();
if (!(instance.element instanceof HtmlHiddenInput) && instance.element.isDisplayed())
throw new ElementNotVisibleException("You may only select visible elements");
String disabledValue = instance.element.getAttribute("disabled");
if (disabledValue.length() > 0) {
throw new UnsupportedOperationException("You may not select a disabled element");
}
if (instance.element instanceof com.gargoylesoftware.htmlunit.html.HtmlOption) {
((com.gargoylesoftware.htmlunit.html.HtmlOption) instance.element).setSelected(true);
} else {
throw new UnsupportedOperationException(
"Unable to select element. Tag name is: " + instance.element.getTagName());
}
}
public HtmlElement getElement()
{
return instance.element;
}
}