1

C# の Visual Studios 2010 で Selenium Web ドライバーを使用しています。jQuery を使用して div のリストを除外し、Selenium を使用してそれらをダブルクリックしています。しかし、私が何をしても、InvalidCastException を取り除くことはできないようです。

ここに私が書いたコードがあります:

IWebDriver m_driver = new ChromeDriver();
IJavaScriptExecutor js = m_driver as IJavaScriptExecutor;
string jsQuery = [insert some query here that returns list of divs];
object result = js.ExecuteScript(jsQuery);

System.Collections.ObjectModel.ReadOnlyCollection<IWebElement> list = (System.Collections.ObjectModel.ReadOnlyCollection<IWebElement>)result;

ただし、結果は webelements のリストを返しますが、何らかの理由で、上記のコードが正常に実行されてキャストされる場合と、ChromeDriver でキャストされない場合があります。機能しない場合、提供されたコードの最後の行は次のように失敗します。

"Unable to cast object of type 'System.Collections.ObjectModel.ReadOnlyCollection`1[System.Object]' to type 'System.Collections.ObjectModel.ReadOnlyCollection`1[OpenQA.Selenium.IWebElement]'."

InternetExplorerDriver では、ほとんどの場合、次のように失敗します。

Unable to cast object of type 'OpenQA.Selenium.Remote.RemoteWebElement' to type 'System.Collections.ObjectModel.ReadOnlyCollection`1[OpenQA.Selenium.IWebElement]'.

IEのRemoteWebElementにキャストしようとしましたが、RemoteWebElementのリストではなくRemoteWebElementが表示されるため、後で列挙できないため、どちらも機能しません。

理由の手がかりはありますか?

4

3 に答える 3

2

次のことを行うことで動作するようになりました。

IWebDriver m_driver = new ChromeDriver();
IJavaScriptExecutor js = m_driver as IJavaScriptExecutor;
string jsQuery = [insert some query here that returns list of divs];
var result = js.ExecuteScript(jsQuery);
foreach (IWebElement element in (IEnumerable) result){...}

これは機能し、例外をスローしなくなりました!

于 2013-01-25T19:12:56.917 に答える
0

なぜあなたはただ使わないのですdriver.findElements(By.xpath())か?
jQuery を使用しなければならない特定の理由はありますか?

jQueryリストから実際の要素を取得するには、おそらく使用する必要があります.toArray()

于 2013-01-04T13:01:54.100 に答える
0

JavaScript から返されるオブジェクトが実際のHTML 要素であり、jQuery でラップされたオブジェクトではないことを確認してください。jQuery は独自のオブジェクト内に要素をラップしている可能性があります。これは、JavaScript の実行から返されるオブジェクトが実際には .xml ではないことを意味しますIWebElements

余談ですが、要素の配置に JavaScript を使用することが理にかなっていることはあまりありません。FindElements()単に自分の目的に使用できない理由について説明する価値があるかもしれません。

于 2013-01-04T16:01:10.600 に答える