セレンのドキュメントを確認した後、明示的な待機を間違って実装しようとしているのだろうかと思っています。
ドキュメントでは、常に新しい要素を識別し、定義された待機をその要素に割り当てることを示しています
WebDriver driver = new ChromeDriver();
driver.get("https://google.com/ncr");
driver.findElement(By.name("q")).sendKeys("cheese" + Keys.ENTER);
// Initialize and wait till element(link) became clickable - timeout in 10 seconds
WebElement firstResult = new WebDriverWait(driver, Duration.ofSeconds(10))
.until(ExpectedConditions.elementToBeClickable(By.xpath("//a/h3")));
// Print the first result
System.out.println(firstResult.getText());
この例では、新しい要素 firstResult が作成され、定義された待機がそれに割り当てられます。
これは必須ですか?常にこのようにする必要がありますか?
これが私が尋ねる理由です。
私は PageFactory モデルを使用しており、ここに示すように、FindBy アノテーションを介して要素を定義しています。
// Input field for slice ID
@FindBy(how = How.XPATH, using = "//input[@name='id']")
private WebElement inputSliceId;
次に、同じクラスで、それらを使用するいくつかの便利なメソッドを定義しました。
さて、私の便利なメソッドでは、このようなことをする必要がありますか?
inputSliceId = new WebDriverWait(driver, Duration.ofSeconds(10))...
inputSliceId.sendKeys(...
私が今疑問に思っていることは、問題の要素に直接割り当てられていない待機ステートメントを配置することです。
例えば、こんなことをしてきました。
buttonSubmit.click();
WebDriverWait wait = new WebDriverWait(driver, 5);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@role='alertdialog']")));
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("//div[@role='alertdialog']")));
なんで?(ここは完全に間違っている可能性があります)
ボタンをクリックすると、ポップアップが表示されるのを待つ必要があります
主な質問 は次のとおりです。要素に割り当てていないため、これらの2つの待機行は実際には何もしていませんか? それとも、待機によって指定された条件が発生するまで、Web ドライバーが引き続き保持されますか?