7

セレン2(WebDriver)を使用しています。

ボタンを見つけて、スクリプトをクリックします。

driver.findElement(By.cssSelector("button:contains('Run Query')")); 

また

driver.findElement(By.cssSelector("css=.gwt-Button:contains('Run Query')")) 

そのhtmlは次のようなものです:

<button type="button" class="gwt-Button" id="ext-gen362">Run Query</ 
button> 

IDは動的に生成されるため、IDを利用できません。

containsのようなものでcssSelectorを使用する方法はありますか?これは可能ですか?

4

6 に答える 6

12

CSS にはそのようなものがないため、CSS セレクターでこれを行うことはできません:contains()。それは何年も前に放棄された提案でした。

要素テキストで選択したい場合は、XPath セレクターを使用する必要があります。何かのようなもの

driver.findelement(By.xpath("//button[contains(., 'Run Query']")))

また

driver.findelement(By.xpath("//[contains(concat(' ', @class, ' '), ' .gwt-Button ') and contains(., 'Run Query'])))

于 2013-01-30T02:00:45.687 に答える
3

別のオプションは、jQueryを使用することです。これがページに存在する場合は、次のようになります。

var webElement = ((JavascriptExecutor)driver).executeScript("return jQuery('button:contains(Run Query)')");
于 2013-01-30T09:40:44.420 に答える
0

CSS だけでは必要なものは得られません。テキストでフィルタリングすることはできません。js を使用して要素の ID を取得するか、正しいテキストのボタンが見つかるまでコード内のすべてのボタンをループします。これがpythonの場合:

[btn for btn in browser.find_elements_by_css_selector('button')
 if 'Run Query' in btn.text]

これを簡単に一般化して、ヘルパー関数を作成することもできます。

于 2013-01-30T01:36:27.780 に答える
0

私は同じボートに乗っており、現在、特定のテキスト コンテンツを含む要素を見つけるために、"contains" を含む XPath セレクターを使用しています。一部は大きなテーブル内に<td>あり、一部は<td><a>大きなテーブルの奥深くにあります (特定の列ですが、行は事前に不明です)。非常に遅い (Firefox 20 でこのようなテーブル エントリを見つけるだけで 4 ~ 5 秒) ため、CSS を使用して高速化することを望んでいました。多くの場合、テキストはそれ自体 (完全) であり、無視したいパスの末尾にあるファイル名である場合もあります。それが既知の列であるが未知の行であり、<td>または<td><a>(同じテーブルにある場合もあります)。私が探しているテキストが完全である(他のテキストの最後ではない)ほとんどの場合、等価比較はcontains()よりもはるかに高速ですか?「で始まる」ルックアップがあると思いますが、「で終わる」ルックアップはありますか? 「id」を使用するとさらに高速になることはわかっていますが、残念ながら、この HTML にはここに ID がなく、ID を追加できません。このテキストを含むを探している<tr>ので、同じ行の別の要素を見つけてそのテキストを取得するか、リンクをクリックできます。<td>行の小さなサブセットを見つけてそのテキストをチェックしても問題はありませんが、可能な場合はandを個別に検索することは避けたいと思います<td><a>

于 2013-05-30T15:44:53.300 に答える
0

含むを使用することはできませんが、代わりにワイルド カードを使用してください。

driver.findElement(By.cssSelector("button:(*'Run Query'*)")); 
于 2013-10-16T08:35:16.633 に答える