找到等待混淆的元素Selenium c#

时间:2017-01-29 08:27:38

标签: selenium selenium-webdriver

在我的学习曲线中,我一直在寻找正确的方法来等待加载元素,并在google上获得大量页面。

归结为2,但在我的观点中,Method2(ExpectedConditions.ElementIsVisible)更优雅,并且当您同意或有更好的方法时,方法1正在尝试实现什么?

方法1

        public static IWebElement FindElement(this IWebDriver driver, By by, int timeoutInSeconds)
        {
            if (timeoutInSeconds > 0)
            {
                var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));
                return wait.Until(drv => drv.FindElement(by));
            }
            return driver.FindElement(by);
        }

方法2

  public static IWebElement FindElement(this IWebDriver driver, By by, int timeoutInSeconds)
        {
            WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));
            var element = wait.Until(ExpectedConditions.ElementIsVisible(by));
            return element;
        }

如果" NoFoundElement异常被抛出,是否已经处理或者我应该忽略它会发生什么建议或改进?

1 个答案:

答案 0 :(得分:0)

我会说,"方法2"是这样做的首选方式。仅仅因为如果某些内容已经在WebDriver中实现,那么您无需在测试框架中重新实现它。

关于NotFoundException的问题:如果在指定的超时后仍未满足您等待的条件,则WebDriverWait将提升WebDriverTimeoutException }。根据您要等待的条件,WebDriverTimeoutException将有一个内部异常,其中包含更多详细信息。例如,如果您使用ExpectedConditions.ElementIsVisible(By.Id("myid"))并且该元素根本无法找到,则内部异常将为NoSuchElementException。如果元素可以定位但在给定的超时后不可见,那么您只需获得WebDriverTimeoutException

根据您想要做的事情,一旦您确定该元素是"那么",您也可以使用不同的ExpectedConditions。如果您正在等待的元素是一个按钮,并且您想要单击它,则可以使用ExpectedConditions.ElementToBeClickable,因为这不仅会等待元素加载到DOM中并且可见,而且还等待使元素得到启用。