我在这里非常无知,但是当页面包含多个具有相同类名的元素时,似乎我的代码不再以可预测的方式与页面交互。例如,如果页面上具有“提交”类的单个元素,我可以编写:
WebElement submitButton;
submitButton = bot.findElement(By.className("submit"));
submitButton.click();
然后将在浏览器中单击该提交按钮。但是,如果在同一网页上有两个(或多个)“ home”类的元素,我可以这样写:
WebElement homeButton;
homeButton = bot.findElement(By.className("home"));
homeButton.click();
似乎没有任何点击。
答案 0 :(得分:0)
与findElement(By.id(java.lang.String id))
或findElement(By.name(java.lang.String name))
一样, findElement(By.className(java.lang.String className))
也将返回网页上的第一个匹配元素。 / p>
正如您提到的,HTML DOM中存在一个带有 class submit 的元素,因此您的Locator Strategy将始终找到唯一的元素元素,随后的click()
会很好地工作。
正如您提到的,在 HTML DOM 中有两个(或多个)具有 class home 的元素,因此 Locator如果{strong>可见,显示,则bot.findElement(By.className("home"));
行中的策略将提取DOM Tree中存在的第一个匹配元素,而不受条件限制strong>,是否可交互。因此,您随后的click()
甚至可能失败。
在这种情况下,您可能会遇到以下任一例外情况:
By.className("home")
:
By.cssSelector(java.lang.String selector)
By.xpath(java.lang.String xpathExpression)