Selenium,处理元素不可点击的最佳实践是什么
Selenium, what is the best practice to deal with element is not clickable
我正在使用 selenium 2.46(firefox 驱动程序)开发应用程序。我的代码中有很多 element.click() 。有时元素不可见或不可点击会使应用程序抛出 selenium 异常。
为了解决这个问题,我对每个需要单击的元素使用 WebdriverWait(driver, 10).until(...)。
我的问题是有没有其他更好的方法或设计模式可以帮助我最好地解决问题。
或者至少我不必为每个需要 click() 的元素使用 WebdriverWait。
除了单击之外,您可以尝试的另一个选项是在相应元素上按回车键,为此您可以参考该元素的 ID。
driver.findElement(By.id("elementid")).sendKeys(Keys.ENTER);
使用隐式等待而不是显式等待并提供预期条件,直到元素在屏幕上不可见。
希望对您有所帮助
你无法避免WebDriverWait
。如果你发送一个 webdriver click 命令,webdriver 会盲目地假设 "element is clickable"。您需要指示 webdriver 等待,因为您的元素很特殊并且需要一些同步才能单击它。我认为您不需要为所有其他元素执行此操作。您可以合并 ExpectedConditions,这样您就可以保持代码片段易于管理且体积小。所以像,
WebDriverWait wait = new WebDriverWait(driver,30);
wait.until(ExpectedConditions.elementToBeClickable(By.id("foo"))).click();
我正在使用 selenium 2.46(firefox 驱动程序)开发应用程序。我的代码中有很多 element.click() 。有时元素不可见或不可点击会使应用程序抛出 selenium 异常。
为了解决这个问题,我对每个需要单击的元素使用 WebdriverWait(driver, 10).until(...)。
我的问题是有没有其他更好的方法或设计模式可以帮助我最好地解决问题。
或者至少我不必为每个需要 click() 的元素使用 WebdriverWait。
除了单击之外,您可以尝试的另一个选项是在相应元素上按回车键,为此您可以参考该元素的 ID。
driver.findElement(By.id("elementid")).sendKeys(Keys.ENTER);
使用隐式等待而不是显式等待并提供预期条件,直到元素在屏幕上不可见。
希望对您有所帮助
你无法避免WebDriverWait
。如果你发送一个 webdriver click 命令,webdriver 会盲目地假设 "element is clickable"。您需要指示 webdriver 等待,因为您的元素很特殊并且需要一些同步才能单击它。我认为您不需要为所有其他元素执行此操作。您可以合并 ExpectedConditions,这样您就可以保持代码片段易于管理且体积小。所以像,
WebDriverWait wait = new WebDriverWait(driver,30);
wait.until(ExpectedConditions.elementToBeClickable(By.id("foo"))).click();