页面中的代码如下:
<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){}
答案 0 :(得分: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很容易变得不正确。恕我直言,最好是获取页面元素的子集,然后在逻辑上筛选它们。但是,如果它工作,它的工作原理! :)