Java 使用ThreadLocal的FluentWait selenium<;RemoteWebDriver>;

Java 使用ThreadLocal的FluentWait selenium<;RemoteWebDriver>;,java,multithreading,selenium,testing,wait,Java,Multithreading,Selenium,Testing,Wait,我正在寻找一种解决方案来在我的java selenium测试中实现FluentWaitis。 问题是使用ThreadLocal将我的驱动程序声明为AD local以并行运行它们 这是我的密码: //My variable declaration protected ThreadLocal<RemoteWebDriver> threadDriverFirefox = null; //I create one for my thread in my BeforeTest threadD

我正在寻找一种解决方案来在我的java selenium测试中实现FluentWaitis。 问题是使用ThreadLocal将我的驱动程序声明为AD local以并行运行它们

这是我的密码:

//My variable declaration
protected ThreadLocal<RemoteWebDriver> threadDriverFirefox = null;

//I create one for my thread in my BeforeTest
threadDriverFirefox = new ThreadLocal<RemoteWebDriver>();
threadDriverFirefox.set(new RemoteWebDriver(new URL(urlnode), DesiredCapabilities.firefox()));

//Add this method to get my driver
 public WebDriver driverFirefox() {
return threadDriverFirefox.get();
}

//And use it like this in my test
driverFirefox().get(weburl);
但是我有一个语法错误

这条线上有多个标记 -令牌“)上出现语法错误,请删除此令牌 -令牌上的语法错误,放置错误 建造(s)

有什么好办法吗


谢谢

如果您使用ThreadLocal,它应该是静态的,否则可能会导致严重的内存泄漏。如果ThreadLocal是静态的,那么应该以这种方式访问它。此外,由于引用是共享的,您不应该通过线程(引用)来初始化它,而应该只通过值(调用
set()
)来初始化它


如果使用ThreadLocal,它应该是静态的,否则可能会导致严重的内存泄漏。如果ThreadLocal是静态的,那么应该以这种方式访问它。此外,由于引用是共享的,您不应该通过线程(引用)来初始化它,而应该只通过值(调用
set()
)来初始化它


语法错误出现在
公共WebElement apply(WebDriver driverFirefox())
中。您不能将方法声明为方法签名的参数,只需将
()
删除到
公共WebElement apply(WebDriver driverFirefox){返回driverFirefox.findElement(By.id(“logEmailField”))
语法错误在
公共WebElement应用(WebDriver driverFirefox())
您不能将方法声明为方法签名的参数,只需将
()
删除到
公共WebElement应用(WebDriver driverFirefox){返回driverFirefox.findElement(By.id(“logEmailField”))
Ok Ok Ok Ok,我可以为特定元素执行此操作吗?
currentDriver().findElement(By.id(“logEmailField”);
WebElement apply(WebDriver driver){return driver.findElement(By.id(“logEmailField”);}
我没有指定我的waitfluent变量?你不必指定,这就是它被称为fluent的原因:
new FluentWait(currentDriver()).withTimeout(30,TimeUnit.SECONDS)。轮询间隔(2,TimeUnit.SECONDS)。忽略(NoSuchElementException.class)。直到(新函数(){public WebElement apply(WebDriver driver){return driver.findelelement(By.id(“logEmailField”);}
我的天啊,对不起!非常感谢您的帮助_okok,我可以为特定元素执行此操作吗?
currentDriver().findElement(By.id(“logEmailField”);
WebElement apply(WebDriver driver){return driver.findElement(By.id(“logEmailField”);}
我没有指定我的waitfluent变量?您不必指定,这就是它被称为fluent的原因:
new FluentWait(currentDriver())。withTimeout(30,TimeUnit.SECONDS)。pollingEvery(2,TimeUnit.SECONDS)。忽略(NoSuchElementException.class)。直到(new Function(){public WebElement apply(WebDriver驱动程序){return driver.findElement(By.id(“logEmailField”);}
我的天啊,对不起!非常感谢你的帮助_
Wait waitfluent = new FluentWait(driverFirefox()).withTimeout(30, TimeUnit.SECONDS)
    .pollingEvery(2, TimeUnit.SECONDS).ignoring(NoSuchElementException.class);

WebElement testElement = waitfluent.until(new Function() {
    public WebElement apply(WebDriver driverFirefox() ) {
    return WebDriver driverFirefox().findElement(By.id("logEmailField"));
    }
});
public class TestContext {

  static ThreadLocal<WebDriver> CURRENT_DRIVER = new ThreadLocal<>();

  public static WebDriver currentDriver(){
    return CURRENT_DRIVER.get();
  }

   public void beforeTest(RemoteWebDriver driver) {
    CURRENT_DRIVER.set(driver);
   }
}
Wait waitfluent = new FluentWait(TestContext.currentDriver())
                      .withTimeout(30, TimeUnit.SECONDS)
                      .pollingEvery(2, TimeUnit.SECONDS)
                      .ignoring(NoSuchElementException.class);