t.me/atinfo_chat Telegram группа по автоматизации тестирования

как реализовать waitObject, когда object доступен в ДОМ модели, но не прорисован?


(Mykhailo Poliarush) #1

Selenium 2.0


(d3unka) #2

Разработчики в хелпе пишут, что 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;
	   }
	  };
  }

}


(akeem) #3

Можно попробывать переопределить метод 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;
}

}