重新加载内容后,Selenium Chrome webdriver无法找到元素

时间:2017-02-15 22:21:59

标签: selenium

我正在测试一个页面,其中div使用具有多个文本框和按钮的表单重新加载。然而,在重新加载div之后,webdriver无法在屏幕上找到任何元素。我尝试了不同的等待,但它从未找到元素。但是,当我尝试找到一个没有改变的元素(即顶部导航元素)时,它会发现它没问题。

        Driver.Instance.FindElement(By.Id("igtxttxt_CAge")).Click();
        var wait = new WebDriverWait(Driver.Instance, TimeSpan.FromSeconds(10));
        wait.Until(d => d.SwitchTo().ActiveElement().GetAttribute("id") == "igtxttxt_CAge");

在刷新div内容时,我能做些什么吗?

收到错误:

  

没有这样的元素:无法找到元素:   { “方法”: “ID”, “选择器”: “igtxttxt_CAge”}

     

(会话信息:chrome = 56.0.2924.76)

     

(司机资料:chromedriver = 2.27.440174

2 个答案:

答案 0 :(得分:0)

在您的情景中,我认为fluentwaitwebdriverwait更适合候选人。您可以尝试以下代码。当element not found exception等待时,它将忽略所有这些no webdriver

FluentWait fluentWait = new FluentWait<>(webDriver) {
  .withTimeout(30, TimeUnit.SECONDS)
  .pollingEvery(200, TimeUnit.MILLISECONDS);
  .ignoring(NoSuchElementException.class, TimeoutException.class)
  .ignoring(StaleElementReferenceException.class);
}

您可以使用它,直到您的元素可点击或可见。

fluentWait.until(ExpectedConditions.visibilityOf(By.Id("igtxttxt_CAge")));
fluentWait.until(ExpectedConditions.elementToBeClickable(By.Id("igtxttxt_CAge")));

希望这会有所帮助。这是webdriverwait和fluentwait之间的difference

答案 1 :(得分:0)

我找到了这个问题的答案。直到我查看驱动程序包含的HTML内容,我才加载,我加载的页面已加载到iFrame中。

我添加此代码后:

 Driver.Instance.SwitchTo().Frame("frame_Calculator");

然后我的其余代码按预期工作:

        Driver.Instance.FindElement(By.Id("igtxttxt_CAge")).Click();
        ((IJavaScriptExecutor)Driver.Instance).ExecuteScript("$('#igtxttxt_CAge').trigger('focus')");