我正在测试一个页面,其中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
答案 0 :(得分:0)
在您的情景中,我认为fluentwait
比webdriverwait
更适合候选人。您可以尝试以下代码。当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')");