私はかつてあなたと同じ状況に陥ったことがあります。さらに、実際には見つかったものの表示されなかった多くの要素がありました。JSF はまだそれらを表示できるほど高速ではありませんでした。また、何度も書いて疲れselenium
ました。
だから私は座って、以下のコードを書きました。すべての要素がページに存在し、それらと対話する前に表示されるのを待ちます (またはタイムアウト後に失敗します)。その後 WebDriver に移行したため、元のコードはありませんが、次のようなものでした。
public static long WAIT = 10000; // ten seconds
private void waitForElement(String locator) {
long targetTime = System.currentTimeMillis() + WAIT;
boolean found;
do {
found = selenium.isElementPresent(locator) && selenium.isVisible(locator);
} while (!found && (targetTime < System.currentTimeMillis()));
if (!found) {
throw new SeleniumException("Element " + locator + " not found");
}
}
public void click(String locator) {
waitForElement(locator);
selenium.click(locator);
}
public void type(String locator, String text) {
waitForElement(locator);
selenium.type(locator, text);
}
これに関してはwaitForCondition()
、要素が存在するかどうかを検出するコードである必要があります。
String locator = "id=anything";
String script =
"var retValue = true;" +
"try {" +
" selenium.browserbot.findElement('" + locator + "');" +
"} catch(e) {" +
" retValue = false;" +
"}" +
"retValue;";
selenium.waitForCondition("!!selenium.browserbot.findElement('" + locator + "')", "10000");
selenium.click(locator);
プレーンな JavaScript のみ:
var retValue = true;
try {
selenium.browserbot.findElement('" + locator + "');
} catch(e) {
retValue = false;
}
retValue;