10

ここで初めてセレンを使用して、なぜだろうと思っていました:

final WebElement justAnId = findElement(By.cssSelector("#someId"));
final WebElement whatIWant = justAnId.findElement(
    By.cssSelector(".aClass.andAnother input[type=text]")
);

動作しますが、動作しません:

final WebElement whatIWant = findElement(By.cssSelector(
    "div#someId.aClass.andAnother input[type=text]"
));

それらは私と同等のように見えますが、次のようになります。

org.openqa.selenium.NoSuchElementException: Unable to locate element:
{"method":"css selector","selector":"div#someId.aClass.andAnother input[type=text]"}

これは意図された動作ですか、それとも Selenium のバグですか? Selenium のバグトラッカーをざっと見ましたが、それについては何もわかりませんでした。必要のない問題を提起する前に、ここで質問したいと思います。また、私が理解している限り、IE6では機能しませんが、誰が気にします. この実行にはfirefoxを使用していました。

4

2 に答える 2

11

実際、この 2 つはまったく異なるセレクターです。

cssSelector は次のとおりです。

div#someId.aClass.andAnother input[type=text]

しかし、あなたが本当に書きたかったのは:

div#someId .aClass.andAnother input[type=text]

ID とクラスの間のスペースに注意してください。あなたはそれが必要です。

于 2013-07-19T01:28:17.827 に答える
8

findElement().aClass.andAnother input[type=text]は現在のコンテキストで要素を見つけます。つまり、コードの最初のスニペットは、 に含まれる に一致する要素を実際に見つけていることを意味します#someId。その ID を持つ要素には、2 つのクラスが含まれる場合と含まれない場合があります。WebDriver は、同じ要素を参照しているとは想定していません。先祖がand でinputある限り、 を見つけるだけです。#someId.aClass.andAnother

これは、 anyのみdiv#someId.aClass.andAnother input[type=text]を検索する とはまったく異なりinput[type=text]ます(つまり、ID とクラスの両方を含むです)。div#someId.aClass.andAnother div

于 2013-01-29T17:45:38.603 に答える