1

C#を使用してSeleniumWebDriverを使用してサブメニュー項目をクリックできません。IE9とFireFox13を使用しています。ActionBuilderを試しましたが、機能しません。要素をクリックできないというエラーが表示されます。

    WebDriverWait Wait = new WebDriverWait(webDriver, TimeSpan.FromSeconds(5));
    IWebElement menu = Wait.Until((d) => webDriver.FindElement(By.Id("id1")));
    IWebElement menuOption = Wait.Until((d)=>webDriver.FindElement(By.Id("ID2")));
            Actions builder = new Actions(webDriver);
            builder.MoveToElement(menu).Build().Perform();
            Thread.Sleep(5);
            //then click when menu option is visible
            menuOption.Click();

私はjavascriptも使用しました:js.ExecuteScript( "return $(\" a:contains('ID1')\ ")。mouseover();"); //マウスをメインメニューに
移動webDriver.FindElement(By.Id( "ID2"))。Click();

非表示の要素をクリックするための解決策を教えてください

4

2 に答える 2

1

期待される条件を使用して、要素の上にカーソルを合わせた後、要素がクリック可能になるのを待つことができます(Thread.sleep()ほとんどの場合、これは悪い選択です。5ミリ秒では不十分です)。

このクラス(名前空間内)のドキュメントは、今私が見ることができるように壊れていますが、上記のリンクのJavaコードをたどることができれば、Javaの予想される条件は次のとおりです-C#でもほぼ同じです。ExpectedConditionsOpenQA.Selenium.Support.UI

于 2012-06-28T10:07:51.317 に答える
1

ステートメントを使用する代わりにThread.sleep()。表示されていることを確認してから、要素をクリックしてみてください。

クリックしたいWebElementを取得したらisDisplayed()、上記の投稿で@Slanecが話しているExpectedContitionステートメント内のメソッドを使用して表示されているかどうかを確認します。

これにより、Wait.Until()がtrueを返した後にのみ要素をクリックするようにすることができます。つまり、menuOptionが表示されます。

私はC#を知らないので、Javaでコードを書いています。しかし、私が何を言おうとしているのか理解できると思います-

    new WebDriverWait(driver, 60).until(new ExpectedCondition<Boolean>() {

        public Boolean apply(WebDriver driver ) {


            return driver.findElement(By.Id("ID2")).isDisplayed();
        }
    });

これがお役に立てば幸いです。

于 2012-06-28T10:39:53.097 に答える