3

C#(.Net)を使用したFF/IE用のSeleniumWebdriverの使用

以下は私のページソースです。CssSelectorを使用してページから特定の名前を検索/含むようにしています。以下のコードを試してみましたが、エラーが発生しました。ヘルプはありますか?

//コード

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

//エラー:

e {"Unable to find element with css selector == td:contains('John John')"}  System.Exception {OpenQA.Selenium.NoSuchElementException}

//私のhtmlコード:

 <div id="ctl00_ContentPlaceHolder1_AddeCardControl1_gv_ctl01_RecordCount" style="float:right; padding-right:10px; margin-top:3px;">
  <b>308</b> Items Found
 </div>
 </td>
</tr>
<tr class="item">
 <td align="center"><a href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$AddControl1$gv','Select$0')">Edit</a></td>
 <td align="center" style="width:15px;"></td>
 <td>John John</td>
 <td>&nbsp;</td>
 <td>&nbsp;</td>
 <td>&nbsp;</td>
 <td><img src="check.png" alt='Active' style='display: ;' /></td>
 <td>9/7/2012 11:15:08 PM</td>
</tr>
<tr class="altItem">
 <td align="center"><a href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$AddControl1$gv','Select$1')">Edit</a></td>
 <td align="center" style="width:15px;"></td>
 <td>John Schulz</td>
 <td>&nbsp;</td>
 <td>Visitors</td>
 <td>&nbsp;</td>
 <td><img src="check.png" alt='Active' style='display: ;' /></td>
 <td>9/7/2012 6:28:29 PM</td>
</tr>
<tr class="item">
 <td align="center"><a href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$AddControl1$gv','Select$2')">Edit</a></td>
 <td align="center" style="width:15px;"></td>
 <td>Parker Smith</td>
 <td>&nbsp;</td>
 <td>Visitors</td>
 <td>&nbsp;</td>
 <td><img src="check.png" alt='Active' style='display: ;' /></td>
 <td>9/7/2012 6:01:28 PM</td>
</tr>
<tr class="altItem">
 <td align="center"><a href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$AddControl1$gv','Select$3')">Edit</a></td>
 <td align="center" style="width:15px;"></td>
 <td>Test 123</td>
 <td>&nbsp;</td>
 <td>Visitors</td>
 <td>&nbsp;</td>
 <td><img src="check.png" alt='Active' style='display: ;' /></td>
 <td>9/7/2012 1:36:45 PM</td>
</tr>
<tr class="item">
 <td align="center"><a href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$AddControl1$gv','Select$4')">Edit</a></td>
 <td align="center" style="width:15px;">
4

5 に答える 5

1

:contains疑似セレクターは、W3CCSSSelector標準の一部ではありません。そのため、ブラウザはそれを使用した要素の選択をサポートしていません。一部のJavaScriptCSSセレクターエンジン(たとえば、jQueryで使用されるエンジンであるSizzle)は、:contains疑似セレクターを提供しますが、その存在は信頼できません。

要素のテキストコンテンツから要素を見つける必要がある場合、現時点での唯一の解決策はXPathを使用することです。あなたのケースでこれを見つける方法の(非常にパフォーマンスの悪い)例は次のようになります:

IWebElement element = driver.FindElement(By.XPath("//td[contains(., 'John John')"));

より良い解決策は、自動化するアプリケーションに、見つける必要のある要素の適切なIDを持たせることです。最後の手段としてのみ、テキストを使用して要素を検索する必要があります。

于 2012-09-10T17:58:21.167 に答える
0

あなたはこれを試すことができます

var webElements = (Driver.FindElements(By.XPath(elementXpath))).ToList();
webElements.FindIndex(item  => item.Text.Contains("John John").Click()

ここで、「elementXpath」はテーブル「names」の各セルへのパスです。したがって、名前のリストを取得して、一致するものを見つけるだけです。アイテムがクリックされます。

于 2012-09-11T07:05:03.543 に答える
0

javascriptエグゼキュータを使用して要素をクリックする方が幸運かもしれません。私は非常に遅いIE964ビットエミュレーターを使用していますが、特定のボタンをクリックする唯一の方法はjavascriptエグゼキューターを使用することです。

于 2013-04-09T16:17:43.820 に答える
0

CSSセレクターはhtml構造、つまりWeb要素のタイプ、関係、属性で機能するため、ここではあまり役に立ちません。これらはhtmlコンテンツ(この場合は内部テキストコンテンツ「JohnJohn」)ではうまく機能しません。

ただし、xpathはこのジョブで機能します。必要な関数text()は、要素の内部テキストコンテンツを返す関数です。

//td[text()='John John']

したがって、Webドライバーコードは次のようになります。

driver.FindElement(By.xpath("//td[text()='John John']"));

PSFirefoxでFirepathを使用して検証されたすべてのロケーター。

于 2013-08-05T10:45:11.313 に答える
-1

以下のコードを使用できます。

driver.FindElement(By.XPath("//td[contains(text(), 'John John')"));
于 2018-02-14T14:41:14.510 に答える