Jam*_*unn 32 java selenium webdriver selenium-webdriver
我需要检查一个页面对象集合,看看每个页面对象是否在其WebDriver上调用了quit().
我编写了以下方法来检查WebDriver的状态:
public static boolean hasQuit(WebDriver driver) {
        try {
            driver.getTitle();
            return false;
        } catch (SessionNotFoundException e) {
            return true;
        }
}
这是问题:我不喜欢抛出并捕获异常以发现布尔值的真实性,但似乎我没有选择,因为WebDriver API没有提供检查驱动程序是否已退出的方法.
所以我的问题是,是否有更好的方法来检查WebDriver是否已退出?
我在这里找到了一个类似的(也是更一般的)问题,但问题没有任何已经尝试过的代码,唯一的答案是在退出后总是将WebDriver设置为null(我不一定能控制) .
Din*_*ent 20
如果quit()已被调用,则driver.toString()返回null:
>>> FirefoxDriver: firefox on XP (null))
否则,它返回对象的哈希码:
>>> FirefoxDriver: firefox on XP (9f897f52-3a13-40d4-800b-7dec26a0c84d)
所以你可以在分配布尔值时检查null:
boolean hasQuit = driver.toString().contains("(null)");
Jam*_*unn 13
这是最常见的情况. 大多数在实际工作中使用Selenium的开发人员想要一种方便的方式来判断WebDriver是否已经退出,他们正在已经建立的测试框架中工作,并尝试重构框架以确保只使用WebDrivers的自定义扩展比它的价值更麻烦.
在这种情况下,Sajan的回答和Gili对他的回答的建议将没有用,因为压倒   RemoteWebDriver#stopClient()不是一种选择.(此外,即使是这样,大多数人都在寻找一个简单的答案.)
只要您使用Selenium附带的WebDriver标准实现(FirefoxDriver,ChromeDriver,InternetExplorerDriver,SafariDriver等),您就可以将WebDriver转换为RemoteWebDriver,然后检查sessionId是否为null(Pat在右侧)跟踪,但直接调用sessionId比使用更好toString()).
public static boolean hasQuit(WebDriver driver) {
    return ((RemoteWebDriver)driver).getSessionId() == null;
}
对于95%的情况,这个答案应该是好的,因为你经常使用不实现RemoteWebDriver的WebDriver?(不经常.)
这种情况不太常见,但也许您要么:
 
    (a)使用设计良好且抽象化的框架,或
 
    (b)从头开始实施硒测试框架.
在这种情况下,您可以创建自己的扩展WebDriver的界面:
public interface CustomDriver extends WebDriver {
    boolean hasQuit();
}
然后你可以像这样扩展标准WebDrivers(在这个例子中,ChromeDriver):
public class CustomChromeDriver extends ChromeDriver implements CustomDriver {
    boolean hasQuit = false;
    @Override
    public boolean hasQuit() {
        return hasQuit;
    }
    @Override
    public void stopClient() {
        super.stopClient();
        hasQuit = true;
    }
}
在调用quit(RemoteWebDriver Source)之后将调用StopClient方法,可能是您可以子类化您的实例RemoteWebDriver和覆盖stopClient方法,设置一些标志并检查标志以确定webdriver是否已关闭(quit).
| 归档时间: | 
 | 
| 查看次数: | 25606 次 | 
| 最近记录: |