显示异常的 findElement 方法



我需要单击一个可能有 50% 几率出现的按钮,决定将try/catchfindElementBy一起使用。尽管如此,try/catch不起作用,我得到了一个例外。也许有一种更有效的方法来处理该按钮?

driver.manage().timeouts().implicitlyWait(5000, TimeUnit.MILLISECONDS);
WebDriverWait wait = new WebDriverWait(driver,5);
try {
WebElement element = driver.findElement(By.xpath("buttonXpath"));
element.click();
}
catch (NoSuchElementException e){ }

可能您看到的是NoSuchElementException,这可能是由于多种原因而发生的。您可以在NoSuchElementException中找到详细的讨论,Selenium无法定位元素


溶液

最好的方法是构建一个定位器策略,该策略在HTML DOM中唯一标识所需的元素,然后进行以下讨论:

  • 如何检查硒 v3.6 的元素,因为 FF 56 不再可以选择 FireBug?
  • FirePath 在键入 x 路径后不显示 HTML 代码

现在,根据最佳实践,在调用click()时总是诱导WebDriverWaitelementToBeClickable()try-catch{}块中,如下所示:

try{
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("buttonXpath"))).click();
System.out.println("Element was clicked")
}
catch (TimeoutException e){ 
System.out.println("Element wasn't clicked") 
}

这将适用于您:

List<Webelement> element = driver.findElements(By.xpath("buttonXpath"));
if(element.size() > 0) {
element.get(0).click();
}

使用方法检查此元素是否在屏幕上:

if (!driver.findElementsByXPath("buttonXpath`enter code here`").isEmpty()) {
driver.findElementByXPath("buttonXpath`enter code here`").click();
}

最新更新