我实际上有三个问题:
驱动程序。管理()。超时()。pageLoadTimeout(-1,时间单位为秒)
因为我们不能给无限睡眠的线程一个负值。
WebDriver driver=new FirefoxDriver(fb, fp);
driver.get("http://www.google.com");
String str="'Feeling Lucky'";
driver.manage().timeouts().pageLoadTimeout(-1, TimeUnit.SECONDS)
//driver.findElement(By.xpath(".//span[contains(text(),"+str+")]")).click();
while(true)
{
try
{
driver.findElement(By.xpath(".//span[contains(text(),"+str+")]")).click();
break;
}
catch(Exception e)
{
Thread.sleep(500);
}
}
driver.quit();
有没有更好的方法来实现无限等待?
我们在SeleniumWebDriver文档中看到了这一点
/**
* Sets the amount of time to wait for a page load to complete before throwing an error.
* If the timeout is negative, page loads can be indefinite.
*
* @param time The timeout value.
* @param unit The unit of time.
* @return A Timeouts interface.
*/
Timeouts pageLoadTimeout(long time, TimeUnit unit);
您好,如果您创建了等待方法并将其保存在项目中,您可以在任何时间和任何地方使用该等待方法,这是自定义方法
private static WebElement waitForElement(By locator,int timeout)
{
WebElement element=new WebDriverWait(driver,timeout).until(ExpectedConditions.presenceOfElementLocated(locator));
return element;
}
例如,如果您想要等待元素id,您可以按如下所示行代码
**waitForElement(By.id(""),20);**
这里是20毫秒,您可以在这里使用任何时间和webelement
我建议您添加自己的findElement()
方法,而不是试图欺骗Selenium。
免责声明:我全心全意地建议你不要这样做。等待是有原因的。如果您有无限的等待时间,那么如果您在出现问题时不手动干预,您的测试将永远运行。相反,我建议将其设置为一个非常高的数字,但不是无限的。
你可以这样做:
WebElement findElement(By by) {
int attempts = 0;
while (attempts > 300)
try {
return driver.findElement(by);
} catch (Exception e) {
Thread.sleep(500);
attempts++;
}
}
}
没有必要在那里有无限的循环。
再一次,我不建议做以上的事情!我只是提供给你这个解决方案,因为这是你明确要求的。
你可以做的另一件事是,如果你真的想设置一个大的等待:
driver.manage().timeouts().pageLoadTimeout(300, TimeUnit.SECONDS)
那是300秒。。。即使对我来说,这也是非常令人讨厌的,不应该放进去。网页加载不应花费300秒。如果确实如此,那么您还需要修复一些其他问题(;)
有没有更好的写法呢?由于某种原因,我真的需要这个循环吗?(似乎与有关)
问题内容: 今天,当我使用Selenium WebDrive时,出现错误。我的平台是mac osx。这是我的异常日志。 我不知道为什么会这样。我的Firefox路径是默认路径。谢谢您的帮助!! 问题答案: WebDriver使用端口7054(“锁定端口”)作为互斥体,以确保我们不会同时启动两个Firefox实例。您创建的每个新实例将在启动浏览器之前等待互斥体,然后在浏览器打开后立即释放互斥体。 因
我有一段非基于演员的代码,它将一些操作委托给akka演员,我想无限期地等待这个演员的响应,我的意思是,直到这个演员返回一个响应,无论需要多长时间。问题是我不知道如何在未来无限期地等待attern.ask和wait.result方法。 我更喜欢这样的东西: 但这不起作用,因为Timeout不接受Duration对象作为构造函数参数,它只接受FiniteDuration对象。。。 任何想法? 干杯
我有这样的代码: 我知道这不是做这件事的正确方法。以下是我认为可能是正确的方法: 不过,我只是想知道,为什么在运行第一个代码示例时,它会无限期地挂在上?此时代码执行到底发生了什么,即当线程在上阻塞时,什么代码“正在运行”?
问题内容: 请看下面的Java 无限循环。它导致其下面的语句的编译时错误。 以下相同的无限循环可正常工作,并且不会发出任何错误,其中我只是用布尔变量替换了条件。 同样在第二种情况下,循环之后的语句显然不可访问,因为布尔变量为true,但编译器根本没有抱怨。为什么? 编辑:显然,以下版本的卡在无限循环中,但是即使循环中的条件始终存在,因此循环下面的语句也不会对该语句下的语句发出任何编译器错误,因此循
问题内容: 我是Go的新手,来自Node.JS。 在Node中,如果我运行此命令: 由于超出了最大调用堆栈大小,程序将崩溃。 如果我在Go中这样做: 这将运行并打印到标准输出。 我的问题是: 有没有超过我给出的Go示例失败的最大呼叫数量? 这样的代码在Go中是反模式吗? 问题答案: 在Go中,goroutines没有固定的堆栈大小。取而代之的是,它们从很小的大小开始(大约为4KB),并在需要时增大