2

li要素内にあるリンクをセレンでクリックしようとしています。これは、while ループ内で発生しています。クリックは、Firefox ウィンドウのレベルより下にある li に到達するまで機能しています。セレンがクリックを試行する前に Firefox Webdriver ウィンドウを手動で下にスクロールすると、クリックはエラーなしで機能します。

クリックに使用しているJavaコードは次のとおりです。Menu_item_module は、ループが実行されてリストを下に移動するたびに 1 ずつ増加する int です。以下の web 要素は、li 要素を参照しています。

driver.findElement(By.id("digitalVellum_dijit_MenuListItem_" + menu_item_module)).click();

問題のページの li 要素の 1 つを含むコード スニペットを次に示します。

<li id="digitalVellum_dijit_MenuListItem_11" class="dijitLayoutContainer dijitContainer menuListItem level1 item-22 closed dijitLayoutContainer-child dijitLayoutContainer-dijitLayoutContainer" data-dojo-attach-event="onclick:click" data-dojo-attach-point="containerNode" widgetid="digitalVellum_dijit_MenuListItem_11">
<a href="#" data-dojo-attach-point="_link" tabindex="0">
<span class="expander" data-dojo-attach-event="onclick:_toggleState"></span>
<span class="label">Overview</span>
<div class="clearoutfloats"> </div>
</a>
<ul id="digitalVellum_dijit_MenuList_2" class="mainMenu dijitLayoutContainer dijitContainer dijitLayoutContainer-child dijitLayoutContainer-dijitLayoutContainer" data-dojo-attach-point="containerNode" widgetid="digitalVellum_dijit_MenuList_2">
</li>

次のコードを使用して、セレンのスクロールを試みました。

JavascriptExecutor jsx = (JavascriptExecutor)driver;
jsx.executeScript("window.scrollBy(0,100)", "");

これは効果がないようです。スクロール領域がページ全体ではなくフレームであるためだと思います。とにかく、スクロールする必要はまったくないと思いました。要素を選択する必要がある場合、webdriver は自動的にスクロールすると思いました。

どんな助けや洞察も大歓迎です。

ありがとう、スティーブ・アーチボルド

4

2 に答える 2

3

要素が表示されていない (非表示) 場合でも、javascript を実行できます。

JavascriptExecutor jsx = (JavascriptExecutor)driver;
jsx.executeScript("arguments[0].click();", element);

elementクリックしたい要素はどこにありますか。

于 2013-11-11T08:01:10.680 に答える
0

特にループで実行している場合は、クリックする前に要素を待つ必要があると思います。他の人が示唆したように、ウィンドウを最大化してみてください。おそらくそれは WebDriver が WebElement の座標を正確に見つけるのに役立つでしょうが、100% 確信はありません。しかし、WebDriverWait が必要だと思います。これを試してみてください。

WebDriver driver = new FirefoxDriver();
WebDriverWait wait = new WebDriverWait(driver, 300/*seconds*/);
driver.manage().window().maximize();
driver.get("http://www.bbc.com/");
for (int menu_item_module = 0; menu_item_module < 10; menu_item_module++) {
    WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By
                        .id("digitalVellum_dijit_MenuListItem_"
                                +menu_item_module)));
            element.click();
}
于 2013-11-09T23:43:57.323 に答える