1

ページのコードは次のとおりです。

<td align="center" width="50%">

<input type="button" id="M_860735" value="Continue" class="entereclass" style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(244, 244, 244); width: 100px; visibility: hidden; background-position: initial initial; background-repeat: initial initial; " onclick="this.disabled= true; this.value='Loading...'; M_3275409(1);"><br>

<input type="button" id="M_1723091" value="Continue" class="enterclass" style="background: #F4F4F4; width: 100px; margin-top: 3px; visibility: hidden;" onclick=" this.disabled= true; this.value='Loading...'; M_3275409(2);">
</td>

<td align="center" width="50%">

<input type="button" id="M_2802510" value="Continue" class="enterclass" style="background: #F4F4F4; width: 100px; visibility: hidden;" onclick="this.disabled= true; this.value='Loading...'; M_3275409(3);"><br>

<input type="button" id="M_1860441" value="Continue" class="enterclass" style="background-image: initial; background-attachment: initial; background-origin:n initial; background-clip: initial; background-color: rgb(244, 244, 244); width: 100px; margin-top: 3px; visibility: visible; background-position: initial initial; background-repeat: initial initial; " onclick="this.disabled= true; this.value='Loading...'; M_3275409(4);">
</td>

各要素を取得し、4 つの ID を一時変数に保存して、クリックするたびに使用できるようにしたいと考えています。(ボタンの ID はランダムに生成され、それらのクラスは 3 つの異なる選択肢 ["enterclass"、"forward"、および "inputsubmit"] を循環します)

各クラスを通過し、ログイン時にボタンをクリックするために行うことは次のとおりです。

try{ driver.findElement(By.ByClassName.ByClass("enterclass")).click(); } catch {exception e {}

次に、「enterclass」を他のオプションに変更して貼り付けます。

しかし、それらはすべて同じであるため、ここではこれを行うことはできません。

毎回 ID を取得する代わりに、プログラムに ID が 4 つあることを認識させ、それぞれをクリックしてみてはいかがでしょうか。(繰り返しますが、それを行う方法もわかりません、笑)

私はまだJavaに慣れていないので、これらのことを行うための最も熟練した方法をよく知りません.

誰かが私を助けることができれば、返信をいただければ幸いです。^_^

ありがとう!~ モリアのベン王

更新:失敗...私はそれを理解しました。:P

今やりました:

 try{ 
     driver.findElement(By.xpath("/html/body/div/div/table/tbody/tr/td[2]/div[2]/center/table[13]/tbody/tr[3]/td/table/tbody/tr/td/input")).click();
     } catch(Exception e){}
     try{ 
     driver.findElement(By.xpath("/html/body/div/div/table/tbody/tr/td[2]/div[2]/center/table[13]/tbody/tr[3]/td/table/tbody/tr/td/input[2]")).click();
     } catch(Exception e){}
     try{ 
     driver.findElement(By.xpath("/html/body/div/div/table/tbody/tr/td[2]/div[2]/center/table[13]/tbody/tr[3]/td/table/tbody/tr/td[2]/input")).click();
     } catch(Exception e){}
     try{ 
     driver.findElement(By.xpath("/html/body/div/div/table/tbody/tr/td[2]/div[2]/center/table[13]/tbody/tr[3]/td/table/tbody/tr/td[2]/input[2]")).click();
     } catch(Exception e){}
4

1 に答える 1

2

これは非常に長い xpath です。代わりに、「findElement」の代わりに「FindElements」を使用してページ上のすべての「入力」要素を取得し、ID などにアクセスしてそれらをフィルタリングすることをお勧めします。例えば。

elements = driver.findElements(By.xpath("/input");
foreach(IWebElement e in elements)
{
    sting class = elements[0].getAttribute("class");
    if (class == "whatever")
        ;//do your stuff! :)
}

xpath の外では、途方もなく長く見えるだけで、これは非常に保守が困難です。ページの UI がわずかでも変更された場合、xpath は簡単に間違ったものになる可能性があります。私見ですが、ページ要素のサブセットを取得してから、それらを論理的にふるいにかける方がよいでしょう。しかし、それが機能する場合は機能します!:)

于 2012-05-12T01:43:29.720 に答える