web-dev-qa-db-ja.com

ページオブジェクトの複合クラス名エラーを回避する方法

スペースがあるクラス名を使用しようとすると、class = "country name"ページオブジェクトで、私は得ています:

Compound class names not permitted Selenium::WebDriver::Error::UnknownError)

スペースのあるクラス名を使用するにはどうすればよいですか。

例えば:

class = "country name"
11
KAK

代わりにCSSセレクターを使用します。

.country.name

注意すべき重要なことは、この例は間違っているということです! "country name"が国の名前である場合、それはそうです。クラス名にスペースを含めることはできません。実際、class属性はスペースで区切られたクラスのリストです。つまり、クラスcountry nameがある場合、それは1つのクラスではなく、-2要素が属する異なるクラスです。最初のクラスはcountry、2番目のクラスはname

したがって、クラスが間違っている場合は修正してください。そうでない場合は、CSSセレクターを使用します。これは、(非常に長く複雑なXPath式を除いて)複数のクラスを照合するための唯一の信頼できる方法です。単純なXPath式または単純な属性比較(//*[@class='country name']または*[class='country name'])でCSSセレクターを使用しないでください。

17
Petr Janeček

これで使えます

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']");
3
gobi

たとえば、これらのクラス名のいずれかを使用できます

:class => 'country' 

または

:class => 'name'

それが役に立たない場合は、他のタイプのセレクター:cssまたは:xpathを使用するように切り替える必要があります

ただし、:cssの場合は次のように記述します。

:css => '.country.name'

:xpathの場合:

:xpath => '//div[@class='country code']

両方とも動作するはずです

1

クラス名からスペースを削除する必要があります。その場合、Seleniumは理論的には必要な要素を見つけるか、またはCSSセレクターを使用しますそして、それをピリオド/フルストップと組み合わせてクラス名を連結します。

つまり、CSSセレクターを使用してこれをターゲットにします。

<div class="country code"></div>

あなたは使うことができます:

div.country.code

orセレクターをもう少し複雑にすることができます:

div[class='country code']
0
Arran

スペースを含むクラス名がある場合、このエラーが発生します。回避する1つの方法は、要素を識別するためのxpathを作成することです。 htmlを表示すると、xpathを作成できます。また、複数のオブジェクトが同じクラス名を持つため、クラス名を使用してみてください。

0
Vinay