我有使用ajax构建的网页。 在代码中有一个方法:
bool onetaskCompleted= false;
private readonly Object obj = new Object();
private async Task<List<PingReply>> PingAsync()
{
Ping pingSender = new Ping();
var tasks = theListOfIPs.Select(ip => pingSender.SendPingAsyn(ip,2000));
List<Task> continuetask = new List<Task>();
foreach(Task t in taks)
{
continuetask.Add(t.ContinueWith(Action));
}
var results = await Task.WhenAll(continuetask);
return results.ToList();
}
private void ContinuationAction()
{
lock(obj)
{
if(!onetaskCompleted)
onetaskCompleted = true;
}
if(!onetaskCompleted)
{
//execute code
}
}
如您所见,我只需点击,然后等待下一个窗口显示。 当我通过'run selected test'运行此代码时,测试会在等待时冻结并获得时间。但窗口在页面上可见。我可以在浏览器中看到它。 如果我通过'debug selected test'运行此代码,一切正常。我甚至不需要设置断点。调试模式就足够了。选择器还可以。我仔细检查了一下。 这是我的WaitFor方法:
public static void ProceedButtonClick()
{
Driver.WaitForAndIsEnabledFind(ProceedButtonElementBy).Click();
Driver.WaitFor(LoadedPageFinishedIdentifierBy);
}
答案 0 :(得分:0)
总是尝试使用以下方法进行显式等待,这将继续每3秒检查一次元素并单击。
方法:
public static void waitForElementToBeVisible(final WebDriver driver,
final By locator) throws RuntimeException {
Wait<WebDriver> wait = new WebDriverWait(driver, WAIT_TIMEOUT);
try {
wait.until(new ExpectedCondition<WebElement>() {
public WebElement apply(WebDriver driver) {
// driver.switchTo().defaultContent();
WebElement element = driver.findElement(locator);
if (element.isDisplayed()) {
return element;
}
return null;
}
});
} catch (Exception e) {
throw new RuntimeException("Exception while waiting for " + locator
+ ". Exception:" + e + " on " + driver.getCurrentUrl());
}
}
答案 1 :(得分:0)
在找到元素之前使用此代码:
try {
Thread.sleep(10000);
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}