スペースがあるクラス名を使用しようとすると、class = "country name"
ページオブジェクトで、私は得ています:
Compound class names not permitted Selenium::WebDriver::Error::UnknownError)
スペースのあるクラス名を使用するにはどうすればよいですか。
例えば:
class = "country name"
代わりにCSSセレクターを使用します。
.country.name
注意すべき重要なことは、この例は間違っているということです! "country name"
が国の名前である場合、それはそうです。クラス名にスペースを含めることはできません。実際、class
属性はスペースで区切られたクラスのリストです。つまり、クラスcountry name
がある場合、それは1つのクラスではなく、-2要素が属する異なるクラスです。最初のクラスはcountry
、2番目のクラスはname
!
したがって、クラスが間違っている場合は修正してください。そうでない場合は、CSSセレクターを使用します。これは、(非常に長く複雑なXPath式を除いて)複数のクラスを照合するための唯一の信頼できる方法です。単純なXPath式または単純な属性比較(//*[@class='country name']
または*[class='country name']
)でCSSセレクターを使用しないでください。
これで使えます
By.cssSelector("*[class^='classname']");
^ is for if you entering beginning of the class name,
$ is for if you entering ending of the class name usage example below with sample class name: tech random corner text_left
By.cssSelector("*[class^='tech']");
By.cssSelector("*[class$='text_left']");
たとえば、これらのクラス名のいずれかを使用できます
:class => 'country'
または
:class => 'name'
それが役に立たない場合は、他のタイプのセレクター:cssまたは:xpathを使用するように切り替える必要があります
ただし、:cssの場合は次のように記述します。
:css => '.country.name'
:xpathの場合:
:xpath => '//div[@class='country code']
両方とも動作するはずです
クラス名からスペースを削除する必要があります。その場合、Seleniumは理論的には必要な要素を見つけるか、またはCSSセレクターを使用しますそして、それをピリオド/フルストップと組み合わせてクラス名を連結します。
つまり、CSSセレクターを使用してこれをターゲットにします。
<div class="country code"></div>
あなたは使うことができます:
div.country.code
orセレクターをもう少し複雑にすることができます:
div[class='country code']
スペースを含むクラス名がある場合、このエラーが発生します。回避する1つの方法は、要素を識別するためのxpathを作成することです。 htmlを表示すると、xpathを作成できます。また、複数のオブジェクトが同じクラス名を持つため、クラス名を使用してみてください。