我想使用 Selenium 中的类名来定位网页的元素。这是我尝试过的网络元素:
<button class="signup-button b green">Get Started!</button>
当我尝试这种方式时,我无法找到该按钮;
driver.findElement(By.className("signup-button")).click();
但是,使用如下所示的 css 选择器,它可以工作;
driver.findElement(By.cssSelector("button.signup-button")).click();
有时工作有时不工作是什么原因?
因为您能够找到以下元素:
<button class="signup-button b green">Get Started!</button>
using:
driver.findElement(By.cssSelector("button.signup-button")).click();
但无法使用以下方法找到相同的元素:
driver.findElement(By.className("signup-button")).click();
那是因为还有其他元素在HTML DOM with 班级名称 as signup-button
甚至在所需的元素之前,这可能是无形的通过设计。
理想情况下,您还应该能够使用xpath based 定位策略:
driver.findElement(By.xpath("//button[@class='signup-button' and text()='Get Started!']")).click();
最佳实践
但根据最佳实践,您需要使用WebDriver等待为了elementToBeClickable()
您可以使用以下任一方法定位策略:
-
cssSelector
:
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("button.signup-button"))).click();
-
xpath
:
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//button[@class='signup-button' and text()='Get Started!']"))).click();
参考
您可以在以下位置找到一些相关讨论:
- NoSuchElementException,Selenium 无法定位元素
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)