Java WebDriver - 利用WebElement.submit()的阻塞时间

时间:2012-01-10 03:32:52

标签: java selenium webdriver

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


长版:

我正在使用WebDriver Java Client Library 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()正在阻止。

关于如何利用加载时间页面做一些有用的事情的任何建议?

2 个答案:

答案 0 :(得分:0)

你实际上不可能。最终d.findElement(By.id(“pass”))。submit()必须由CPU执行,如果它是一个阻塞调用,那么它将利用CPU(我在单核的上下文中讨论所有这些)。但是现代操作系统会为每个线程提供一个时间片,因此从头到尾不一定需要d.findElement(By.id(“pass”))。submit()。 CPU基本上会给你的其他线程和父线程执行机会。

答案 1 :(得分:0)

不是提交,你可以选择模拟Keypress“Keys.ENTER”,它不会阻塞,然后你可以在你的睡眠循环中显式wait或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
 }