我正面临这种奇怪的超时行为。我尝试使用以下方法加载一些页面:
WebDriver drv = new FirefoxDriver();
drv.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
drv.get(url);
String email = "";
try {
WebElement aElem = Util.safeFindElementByXpath(drv, "//p[1]/a[1]");
if (aElem != null) {
email = aElem.getAttribute("href");
}
} catch (Exception e) {
}
drv.quit();
return email;
safeFindElementByXpath是:
static WebElement safeFindElementByXpath(WebDriver driver, String xpath) {
try {
return driver.findElement(By.xpath(xpath));
} catch (NoSuchElementException e) {
return null;
}
}
现在我将firefox network.http.connection-timeout和network.http.connection-retry-timeout设置为10.现在,如果我重启firefox,我可以看到新的值。但是,如果我尝试运行上面的代码 - firefox窗口打开,它等待一个特定的网站很长一段时间。因此,我在同一个firefox窗口中打开另一个选项卡并检查超时值并找到它们为90和250.如果我更改同一窗口上的值,则selenium代码会立即完成对页面的请求(即它继续执行异常块)。
所以事情是,相同的代码将在许多网站上工作,我不知道哪个网站无效/关闭,我正在考虑将此代码放在一个单独的线程中并在一段时间之后终止该线程调用线程。但这是不可能的,因为子线程无法轮询任何内容,因为它在页面请求时停留,并且之后无法转到轮询代码。
现在问题是我想要任何类型的黑客/解决方法来实现这一点:尝试获取好网站的电子邮件,如果有不良网站只是在一段时间后放弃(按下紧急按钮排序)。< / p>
由于