当“文本”不唯一时,FindElement(By.ClassName(“ classname”))返回什么?

时间:2018-06-20 20:43:35

标签: javascript java selenium selenium-webdriver webdriver

我在这里非常无知,但是当页面包含多个具有相同类名的元素时,似乎我的代码不再以可预测的方式与页面交互。例如,如果页面上具有“提交”类的单个元素,我可以编写:

WebElement submitButton;
submitButton = bot.findElement(By.className("submit"));
submitButton.click();

然后将在浏览器中单击该提交按钮。但是,如果在同一网页上有两个(或多个)“ home”类的元素,我可以这样写:

WebElement homeButton;
homeButton = bot.findElement(By.className("home"));
homeButton.click();

似乎没有任何点击。

1 个答案:

答案 0 :(得分:0)

findElement(By.id(java.lang.String id))findElement(By.name(java.lang.String name))一样, findElement(By.className(java.lang.String className)) 也将返回网页上的第一个匹配元素。 / p>

By.className(“ submit”)

正如您提到的,HTML DOM中存在一个带有 class submit 的元素,因此您的Locator Strategy将始终找到唯一的元素元素,随后的click()会很好地工作。

By.className(“ home”)

正如您提到的,在 HTML DOM 中有两个(或多个)具有 class home 的元素,因此 Locator如果{strong>可见,显示,则bot.findElement(By.className("home"));行中的策略将提取DOM Tree中存在的第一个匹配元素,而不受条件限制strong>,是否可交互。因此,您随后的click()甚至可能失败。

影响

在这种情况下,您可能会遇到以下任一例外情况:

解决方案