Je vous suggère d'utiliser la PageFactory comme prévu et d'avoir un constructeur pour votre classe où vous souhaitez utiliser l'attente explicite. Avoir une séparation entre le script et les objets de la page rend le travail beaucoup plus facile à l'avenir.
public class MyClass {
WebDriverWait wait;
WebDriver driver;
@FindBy(how=How.ID, id="locatorId")
WebElement locator;
// Construct your class here
public MyClass(WebDriver driver){
this.driver = driver;
wait = new WebDriverWait(driver,30);
}
// Call whatever function you want to create
public void MyFunction(){
wait.until(ExpectedConditions.presenceOfElementLocated(locator));
// Perform desired actions that you wanted to do in myClass
}
Ensuite, dans votre scénario de test, utilisez du code pour effectuer votre test. Dans votre exemple, le test est contenu dans la page.
public class MyTestClass {
public static void main (string ... args){
WebDriver driver = new FireFoxDriver();
MyClass myForm = PageFactory.initElements(driver,Myclass.class);
myForm.MyFunction();
}
}
Cet exemple a été modelé d'après l'exemple du livre Selenium WebDriver Practical Guide qui peut être trouvé ici. ici