.:я не решил. Вернее решил.:.удивлению не было предела.:.там в каждом диве по сто спанов таблиц и так далее. Иногда id меняются:.
1) Salomon, мне непонятно, почему, когда человек просит помощи, он в конце концов утаивает своё решение, (размазывая его в общих чертах, типа оно кривоватое, не стоит обсуждения)?!
2) Вашему и общему вниманию я предлагаю своё решение: пример (html-исходник) и java-автоматизация для Internet Explorer или Firefox, цель которой - инициировать обработчики клика/фокусировки для DIV, меняющие их css.
Используется:
- selenium-server-standalone-2.24.1.jar;
- успешно запускается (default browser configuration properties) в IE v.8 или FF esr v.10 на XP.
Внимание: я предлагаю минимально использовать любые функции webdriver API, т.е. строить код автоматизации сценария на основе метода executeScript, (чтобы избежать граблей и глюков этой "замечательной кроссбраузерной" библиотеки, - это я намекаю, что ни qwt ни iexplorer "не виноваты" в кривых руках как api-разработчиков так и автоматизаторов). Данная техника иллюстрируется в примере, и, её специфика состоит в связывании с DIV-объектами событий и их обработчиков в соответствии с особенностями jscript в IE и FF.
Замечание (для sorce-критиков): java-код не претендует на звание "идеальный", это всего лишь как надо работающий пример. В jscript используются id для работы с html-объектами, что сделано для простоты, т.к. практически не существует проблем идентификации объекта посредством dom, хpath или методами jscript-фреймворков, используемых в современных web-приложениях.
----------------------------------------------
<!doctype html public "-//w3c//dtd html 4.01//en" "
http://www.w3.org/tr...l4/strict.dtd"><html>
<header>
<title>test</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="expires" content="mon, 26 jul 1997 05:00:00 gmt">
<style type="text/css">
.block1{width:500px;background:#D3D3D3;padding:5px;padding-right:20px;border:solid 1px black;float:left;}
.block2{width:100px;background:#F8F8FF;padding:5px;border:solid 1px black;float:left;position:relative;top:10px;left:20px;}
.block3{width:140px;height:240px;background:#FFE4B5;padding:5px;border:solid 1px black;float:middle;position:relative;top:0px;left:140px;}
.block4{width:100px;background:#F0FFF0;padding:5px;border:solid 1px black;float:rigth;position:relative;top:-150px;left:340px;}
.block5{width:60px;height:80px;background:#FFFF00;padding:5px;margin:5px;border:solid 1px black;}
.block6{width:30px;height:80px;background:#D8BFD8;padding:5px;margin:5px;border:solid 1px black;}
.block7{background:#d6e5f4;}
</style>
<script type="text/javascript">
function focusInDiv(locator) {locator.className="block7";}
</script>
</header>
<body>
<input type="text" id="test" value="testik"><br>
<div id="main" class="block1"><h1>MAIN</h1>
<div id="left" class="block2"><h1>LEFT</h1></div>
<div id="middle" class="block3"><h1>MIDDLE</h1>
<div id="middle_1" class="block5"><h2>1</h2>
<div id="middle_2" class="block6"><h4>2</h4></div>
</div>
</div>
<div id="right" class="block4"><h1>RIGHT</h1></div>
</div>
</body>
</html>
----------------------------------------------
package test.iebrowser.com;
import static org.junit.Assert.*;
import java.io.File;
import java.util.concurrent.TimeUnit;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
public class MyIETest {
private WebDriver driver = null;
private JavascriptExecutor js = null;
private static String BASE_URL = "
http://localhost/div_test.html"; private static String TYPE_BROWSER = "IE"; //"IE" "FF"
private String eventListenerById(String idElement, String event, String handler, String useCapture) {
String addListener = (TYPE_BROWSER.equals("IE") ? "attachEvent" : "addEventListener");
String removeListener = (TYPE_BROWSER.equals("IE") ? "detachEvent" : "removeEventListener");
event = ("focus".equals(event) ? ("IE".equals(TYPE_BROWSER) ? event : "click") : event);
String listener = (TYPE_BROWSER.equals("IE") ? "on" + event : event);
String obj = "var obj = document.getElementById(\"" + idElement + "\");";
String arg = "\"" + listener + "\", function(e){" + handler + "(obj);}, " + useCapture;
return obj +
"obj." + addListener + "(" + arg + ");" +
"obj." + event + "();" +
"obj." + removeListener + "(" + arg + ");";
}
@Test
public void testUntitled() throws InterruptedException{
driver.get(BASE_URL);
(new WebDriverWait(driver, 15)).until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver d) {
return d.getTitle() != null;
}
});
assertEquals("testik",js.executeScript("return document.getElementById(\"test\").value;"));
js.executeScript(eventListenerById("main", "focus", "focusInDiv", "true"));
Thread.sleep(500);/* задержка только для удобства наблюдения за процессом */
js.executeScript(eventListenerById("left", "focus", "focusInDiv", "true"));
Thread.sleep(500);
js.executeScript(eventListenerById("middle", "focus", "focusInDiv", "true"));
Thread.sleep(500);
js.executeScript(eventListenerById("middle_1", "focus", "focusInDiv", "true"));
Thread.sleep(500);
js.executeScript(eventListenerById("middle_2", "focus", "focusInDiv", "true"));
Thread.sleep(500);
js.executeScript(eventListenerById("right", "focus", "focusInDiv", "true"));
Thread.sleep(500);
assertTrue(Boolean.TRUE);
}
@Before
public void setUp() throws Exception {
if(TYPE_BROWSER.equals("IE")){
driver = new InternetExplorerDriver();
}else{
driver = new FirefoxDriver();
}
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
js = (JavascriptExecutor) driver;
}
@After
public void tearDown() throws Exception {
driver.quit();
}
}