2012-05-11 95 views
1

從頁面的代碼如下:請求幫助指定要與哪些元素進行交互。 (Java的W /硒)

<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> 

我希望能夠採取每個元素存儲在臨時變量的四個ID給每個我嘗試的時間與使用點擊。 (按鈕的ID是隨機生成的,它們的類通過三個不同的選擇循環[「enterclass」,「forward」和「inputsubmit」])

我所做的每件事都是通過類和在登入時按一下按鈕:

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

然後將「enterclass」其他選項,並粘貼。

但我不能這樣做,因爲它們都是一樣的。

也許不是每次都得到這些ID,我可以讓程序識別出有四個,然後點擊每一個? (再次,不知道該怎麼做,或者,大聲笑)

我還是Java的新手,所以我不知道最熟練的方法來做這些事情。

如果有人能幫助我,我將不勝感激。^_^

謝謝! 〜Moria的Ben King

更新: 失敗...我想通了。 :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){} 

回答

2

這是一個很長的XPath。我會建議通過使用'FindElements'而不是'findElement'來獲取頁面上的所有'input'元素,然後通過訪問它們的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可能很容易變得不正確。恕我直言,最好是獲得頁面元素的一個子集,然後在邏輯上篩選它們。但是,如果它工作,它的工作原理! :)