简短版本: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()
正在阻止。
关于如何利用加载时间页面做一些有用的事情的任何建议?
答案 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
}