5

私はSeleniumを始めたばかりで、今この要素を選択する必要があります:

<span class=" close">Matrices</span>

このコード行はゼロ要素を返すので、正しいものではないと思います:-)

ReadOnlyCollection<IWebElement> matrixLink = driver.FindElements(By.PartialLinkText("Matrices"));

しかし、Xpath 以外に適したものを見つけることができませんでしたが、これは ( //*[@id=\"Navigation\"]/div[2]/div[2]/ul/li[7]/span) の ように見えます。

EDIT : スパンにはクラス「close」があります。これはメニューの一部であり、クラス「close」を持つ 19 のスパンがあるため、残念ながら一意のセレクターではありません....

4

3 に答える 3

8

これはうまくいきます:

//*[@id=\"Navigation\"]/descendant::span[text()='Matrices']

可能であれば、主に読みやすさを向上させ、パフォーマンスを向上させるために、XPath クエリを具体的に指定することに注意してください。つまり、クエリでは、ページ内のすべての要素*がクエリされます。Navigation要素がどのような種類の要素かはわかりませんが、正確な要素タイプを入れる必要があります。たとえば、div の場合は次のようにします。

//div[@id=\"Navigation\"]/descendant::span[text()='Matrices']

この XPath について簡単に説明すると、この XPath は要素を取得しNavigation、単純にその中の任意の場所spanを調べて、 のテキストを持つ要素を見つけますMatrices。XPath にビットがないと、直接の childrendescendantのみが検索されます。これは、 の子である要素を意味します。したがって、要素が の子である の子である場合、それをキャッチします。それがなければ、結果は返されません。NavigationTestDivNavigationdescendant

なぜBy.PartialLinkTextうまくいかないのかというと、これはアンカーリンクのみを検索します。これまで見てきたように、アンカー リンクのspan内部に要素が含まれていることや、場合によってはspan単独で存在していることはよくあることです。

By.PartialLinkText同様にBy.LinkText、この要素はアンカー要素ではないため、「見る」ことはできません。

于 2013-02-08T09:43:20.593 に答える
2

これらの場合の私のお気に入りの問題ソルバー:

  • SeleniumIDEをインストールします
  • 必要なリンクをクリックしてください
  • Selenium IDEの「ターゲット」には、さまざまなxpathの可能性があります。

しかし、私はこのアプローチを使用します。そのN番目の要素は「近い」クラス(//span[7]またはそのようなもの)を持ちます

于 2013-02-08T09:14:52.400 に答える
2

//span[text()='Matrices'] を使用できます。要素が選択されます。

于 2013-02-08T11:37:59.777 に答える