2012-01-10 53 views
0

简短版本:WebElement.submit()阻塞;因此我无法利用正在渲染的时间页面来做其他事情。Java WebDriver - 利用WebElement.submit()的阻塞时间


龙版本:

我使用webdriver的Java客户端库2.16.1

我有一个自动化的测试电流连续地进行,但可以并行完成(基本上登录到n个不同用户检查状态)。因此,我尝试使用Thread来使其同时运行:同时触发多个Firefox实例。

的示例代码:

public class FirefoxRunnable implements Runnable { 
    @Override 
    public void run() { 
     WebDriver d = new FirefoxDriver(); 
     d.get("http://www.facebook.com"); 
     d.findElement(By.id("email")).sendKeys("username"); 
     d.findElement(By.id("pass")).sendKeys("password"); 
     d.findElement(By.id("pass")).submit(); 
    } 
} 

public static void test() { 
    Thread t1 = new Thread(new FirefoxRunnable("Thread 1")); 
    Thread t2 = new Thread(new FirefoxRunnable("Thread 2")); 
    t1.start(); 
    t2.start(); 
} 

问题:在加载的页面d.findElement(By.id("pass")).submit()阻塞。

任何有关如何利用正在加载的时间页面做一些有用的建议吗?

回答

0

你实际上不能。最后,d.findElement(By.id(“pass”))submit()必须由CPU执行,如果它阻塞调用,那么它将利用CPU(我正在谈论所有这些在单核的情况下)。但是现代操作系统会给每个线程一个时间片,所以这不是必须的,从头到尾所有的时间都会被d.findElement(By.id(“pass”))submit()所占用。 CPU基本上会让你的其他线程和父线程有机会执行。

+0

我实际上认为它是阻塞的,因为它是通过忙等待循环实现的,等待浏览器完成加载页面并返回。 – huy 2012-01-10 08:17:55

0

而不是提交,则可以替代地模拟按键时显示“Keys.ENTER”,这不会是阻断,然后就可以明确的等待或find_element body标签(或不块中的任何方法)在乌尔睡眠循环例如>

for loop{ 
    if not found() //found (e.g findElement(body)) is non blocking, make sure no implicit wait 
     sleep(3 secs) // while sleep utilize this time 
}