在查看了 selenium 文档之后,我想知道我是否试图错误地实现显式等待。
在文档中,它总是显示识别一个新元素,然后将定义的等待分配给所述元素
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']")));
为什么?(这里可能完全错了)
单击按钮后,我需要等待弹出窗口显示一旦出现,我就等待它消失,然后再继续
这是主要问题 这两条等待线是否真的没有做任何事情,因为我没有将它们分配给一个元素?还是它们仍然导致 Web 驱动程序保持到等待指定的条件发生?