1

質問する前に検索しようとしましたが、問題に対する正しい答えが見つかりませんでした (または理解できませんでした)。

いくつかのグラフをテストしています (Highcharts 6 を使用)。同じ URL に 6 つの異なるグラフがあります。それぞれが、div内部にさまざまな要素 (ボタンなど) を持つコンテナー内にあります。

すべてのボタンのクラスや ID は同じです。
たとえば、これは chart1 の最大化/最小化ボタンです。

<a class="has-tooltip btn btn-default change" role="button" title="" id="table" data-original-title="TEXT">
<span class="fa fa-lg ik-wi-icon-th"></span></a>

そして、ここに chart2 の同じボタンがあります:

<a class="has-tooltip btn btn-default change" role="button" title="" id="table" data-original-title="TEXT">
<span class="fa fa-lg ik-wi-icon-th"></span></a>

それらはまったく同じです。そこで、Katalon Recorder を使用して、別のボタンをクリックしていることをどのように認識できるかを調べてみました。これが得られる結果です。

driver.findElement(By.xpath("//a[@id='table']/span")).click(); click1
driver.findElement(By.xpath("//a[@id='table']/span")).click(); click2

driver.findElement(By.xpath("(//a[@id='table']/span)[2]")).click(); click1
driver.findElement(By.xpath("(//a[@id='table']/span)[2]")).click(); click2

これはどこ[2]から来たのですか?
クリックしたいボタンをSeleniumに伝えるにはどうすればよいですか?

4

1 に答える 1

3

2DOM に関して//a[@id='table']/spanは、HTMLの2 番目から来ました。

6 つのグラフがあり、それらすべてにリンクがid='table'あり、その下にスパンがあるとします。これは、 //a[@id='table']/span6 つの要素を返すことを意味します。xpath を使用すると、グラフのシーケンスが変更されないことが確実な場合にのみ、最初のグラフをクリックするように言うことができます。

driver.findElement(By.xpath("//a[@id='table']/span")).click();

2番:

driver.findElement(By.xpath("(//a[@id='table']/span)[2]")).click();

三番:

driver.findElement(By.xpath("(//a[@id='table']/span)[3]")).click();

確実に確認するには、テストしたいページで chrome で F12 を押してください。次にコンソールに移動し、次のように入力します。

$x("//a[@id='table']/span")

おそらく6つの要素が返されます。これらの各要素を開いてマウスオーバーすると、Chrome は見つかった要素を強調表示します。Chrome で見つかった 5 番目の要素が必要な場合は、コンソールに次のように入力します。

$x("(//a[@id='table']/span)[5]")

次に、返された要素がページの 5 番目であるかどうかを確認します。

于 2018-04-17T13:31:44.680 に答える