1

更新 2

私はGridViewと呼ばれるコントロールでC#を使用して.Netに取り組んでいます...したがって、グリッドビューコントロールはこのhtmlを次のようにレンダリングして吐き出しTRます。

<tr class="item">
<td align="center">
<td align="center" style="width:15px;"/>
<td>John John</td>
<td/>
<td>Friendship</td>
<td/>
<td>
<td>9/7/2012 6:28:29 PM</td>
</tr>

だから、私はJohn John存在するかどうかを見つけようとしています.XPATHを使用して終了する方法は次のとおりです

        int pageCount = 100;
        bool assertFlag = false;
        for (int i = 0; i < pageCount; i++) 
        {
            try
            {
                string _Id = String.Format("//*[@id='ctl00_ContentPlaceHolder1_AddeCardControl1_gridview_control']/tbody/tr[{0}]/td[3]", i);
                string _txt = GetText(By.XPath(_Id));

                if (_txt == "some text comparing here")
                {
                    //matched
                    assertFlag = true;
                    break;
                }
            }
            catch (Exception e)
            {
                //
            }
        }

皆さんどう思いますか?または、私は恐ろしいひどい間違ったことをしていますか?

PS: 私ができる ID または CSS セレクターがないため、XPATH を使用する以外に他のオプションはありません。

アップデート2終了

アップデート

C# で Selenium WebDriver 2 を使用しており、IE 8 と FF を使用しています。

更新を終了

このエラーがスローされる原因はまだわからないので、スクリプトを持っていて動作します.2回目に実行すると失敗し、以下のメッセージが表示されます.じゃない…どうしたらいいの?このエラーの原因は何ですか? 洞察はありますか?

時々、次のエラー メッセージが表示されます。

Element is no longer valid

時々これ:

Unable to find element with xpath == //*[@id='ctl00_ctl00_ctl00_LeftNavigation_LeftNavigation_LeftNavigationControl1_rptLeftNav_ctl14_lnkText']
4

3 に答える 3

2

最初のケース (要素が無効になった場合):
      要素オブジェクトを長時間使用していると、「要素が DOM に関連付けられていません」などのエラーが表示されます。これは一貫性がありません。解決策は、要素をもう一度見つける必要があることです。
2 番目 (xpath == //*[@id=..... の要素が見つかりません):
      Xpath で、特定のタグの代わりに * を指定しました。そのような場合に同じ ID を持つ異なるタグがあると、どちらを選択するかがわかりません。そのため、適切なタグ名を記載してください。Firefox で FirePath を使用して xpath を確認できます。

于 2012-09-07T07:33:25.810 に答える
1

最後の質問だと思います。Selenium Webdriver を使用したタイムアウトの取得には、多くの優れた機能がありました。それはあなたが尋ねている質問に関連していました。あるタイプのロケーターを使用して要素が見つからない場合は、別のタイプを試してください。

また、あなたが IE 用の xpath ロケーターを使用していることにも気付きました。速度の問題のために IE で xpath を使用してはならない理由 (および一般的に) についての非常に優れたウェビナーがあります。これは、現在の問題のいくつかを引き起こしている可能性があります。

リンクは次のとおりです: http://sauceio.com/index.php/2011/05/why-css-locators-are-the-way-to-go-vs-xpath/。このウェビナーでは、特に IE で CSS が xpath よりも優れている理由を調査します。CSS はさておき、ボックスの設定から使用しているブラウザまで、エラーの原因はさまざまですが、結局のところ、Web 自動化は正確な科学ではありません。あなたにもバグがあるかもしれません...それはあなたが最初にテストしているものではありませんか?

編集

個々の ID を持つものの下で複数の要素を探すことから、タグ内の要素を探すことに完全に切り替えたので、あなたの更新は私にとって少し奇妙です。現在の更新に関しては、CSSロケーターを使用することをお勧めします

driver.FindElement(By.CssSelector("td:contains('John John')"))

タグが見つからない場合は、間違いなく通知されます。前に述べたように、css ロケーターは xpath と同じことを実現しますが、より高速で、IE でより適切に機能します。はい、それらは常に 100% 機能するわけではありません。おそらく 100 回のうち 5 回は css よりも xpath を使用する必要がありますが、全体的には css の方が優れています。それらの使用方法がまだ不明な場合は、関連するリンクを読んでください。それらはよく書かれており、私にとって非常に役に立ちました。

于 2012-09-07T06:27:23.097 に答える
1

率直に言って、あなたが xPath で言及したタイプの ID は好きではありません。css セレクターを使用して、必要な要素を見つけてみてください。そして、firepath (firebug アドオン) で適切に見つかったことを確認します。<span id="j_idt12:j_idt13"> Seleniumtテストスイートを時々実行している間は、原因のようなIDを使用することは常に避けて います。それらは異なる場合があります。したがって、より良いアプローチは、要素へのパス全体を使用して、要素を DOM で直接ポイントすることです。このアプローチを使用すると、要素が「有効ではなくなった」または「見つけられない」などの矛盾を回避できます。

于 2012-09-07T11:55:06.383 に答える