【问题标题】:selenium wait until method returns trueselenium 等到方法返回 true
【发布时间】:2017-11-15 07:40:26
【问题描述】:

我知道 selenium webdriver 可以做到这一点:

var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.VisibilityOfAllElementsLocatedBy(By.ClassName("someclass")));

我不能在我的方法上这样做吗?例如,我有一个截取屏幕截图并与另一张图片进行比较的方法。我想等到该方法返回 true。

所以我有这个代码

while (WelcomeScreen(driver) != true)
{
    Thread.Sleep(1000);   
}

我找不到更好的解决方案吗?

【问题讨论】:

    标签: c# selenium selenium-webdriver


    【解决方案1】:

    你可以使用 FluentWait,我不擅长 C#,所以下面的代码示例是用 Java 编写的。如果您可以将其转换为 C#,我认为它可能会起作用。

     Wait wait = new FluentWait<WebDriver>(driver)
            .withTimeout(30, TimeUnit.SECONDS)
            .pollingEvery(5, TimeUnit.SECONDS)
            .ignoring(NoSuchElementException.class);
    
     wait.until(new Function<WebDriver, Boolean>() {
                    public Boolean apply(WebDriver driver) {
                        return WelcomeScreen(driver)
                    }
                  }
     );
    

    【讨论】:

    • 感谢您的回答。 c# 中的等价代码是:wait.Until((x) => { if(WelcomeScreen(driver)) return true; return false; });
    • 是否可以传递方法(在这种情况下public Boolean apply(WebDriver driver) { return WelcomeScreen(driver) }作为参数?
    • @HappyBird 传递方法是什么意思,它返回的是WelcomeScreen 方法返回的值。
    • 你贴的代码,我喜欢这个。我想把它放在一个方法“WaitUntilTrue”中,对于这个方法,我想传递“Welcomescreen(驱动程序)”。我想我已经通过使用 Action 委托 (stackoverflow.com/questions/5414515/…) 找到了答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 2018-11-09
    • 2021-09-27
    • 2013-09-20
    相关资源
    最近更新 更多