如何使用Selenium元素来等待、检查、点击而不会再次找到元素?

Meg*_*-90 5 c# selenium selenium-webdriver

我是 Selenium 的新手,之前使用过 Telerik 免费测试框架。问题是我无法理解,如何使用已经用 [FindsBy] 识别的元素来等待、检查和点击。

前任:

    [FindsBySequence]
    [FindsBy(How = How.Id, Using = "container-dimpanel")]
    [FindsBy(How = How.CssSelector , Using = ".btn.btn-primary.pull-right")]
    public IWebElement UpdateButton { get; set; }

    internal void ClickUpdateButton(TimeSpan timeout)
    {
        new WebDriverWait(_driver, timeout).
            Until(ExpectedConditions.ElementIsVisible(By.CssSelector(id));
        UpdateButton.Click();
    }
Run Code Online (Sandbox Code Playgroud)

我希望我的代码等待更新按钮可见,然后单击它。但我只想传递 UpdateButton 元素而不是使用 By 选择器。

  • 不确定 UpdateButton.Enabled 是否会等到它可见。

小智 4

接受 WebElement 的可见性有一个预期条件: https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html#visibilityOf-org.openqa。 selenium.WebElement-

Until还返回正在等待的元素,因此您可以将其合并为一行:

internal void ClickUpdateButton(TimeSpan timeout)
{
    WebDriverWait wait = new WebDriverWait(_driver, timeout);
    wait.Until(ExpectedConditions.visibilityOf(UpdateButton)).click();
}
Run Code Online (Sandbox Code Playgroud)

然而,在我的框架中,我通常添加一个辅助函数来执行此操作,因为它被广泛使用。您还可以通过等待可点击等来执行类似的操作,并具有接受 WebElement 或 By 的方法:

public WebElement waitThenClick(WebElement element) 
{
    WebDriverWait wait = new WebDriverWait(_driver, timeout);
    return wait.Until(ExpectedConditions.visibilityOf(UpdateButton)).click();
}
Run Code Online (Sandbox Code Playgroud)