0

我正在使用 selenium 运行我创建的测试。我现在想开始错误处理。我希望能够获取无法找到的元素并"Element start could not be found"在我的错误日志中说出类似的话。如果这不能完成,我想打印发生异常的整行代码。

我不知道该怎么做。目前我只是将每个测试包装在一个 try catch 中,并说Couldn't find element这非常广泛,并没有缩小它找不到的元素。

我的会话设置

private string excelId = CommonMethods.ExcelOfficeVersion();
private const string AppDriverUrl = "http://127.0.0.1:4723";
private static WindowsDriver<WindowsElement> excelSession;

System.Web.Caching.Cache cache = new System.Web.Caching.Cache();
xl.Workbook WB;
public static bool skipTearDown = false;
WindowsElement create;
WindowsElement blankWorkBook;

public static DesiredCapabilities appCapabilities = new DesiredCapabilities();
[TestInitialize]

public void SetUp()
{

    try
    {


        appCapabilities.SetCapability("app", excelId);

        var initialSession = new WindowsDriver<WindowsElement>(new Uri(AppDriverUrl), appCapabilities);

        var capabilities = new DesiredCapabilities();
        capabilities.SetCapability("app", "Root");
        excelSession = new WindowsDriver<WindowsElement>(new Uri(AppDriverUrl), capabilities);

        excelSession.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
        CommonMethods.keyCheck(excelSession);
        //blankWorkBook = excelSession.FindElementByName("Blank workbook");

        //cache.Insert("Create", create);

        CommonMethods.checkCreateExcel();

    }
    catch (Exception)
    {

        CommonMethods.ExceptionHandler("WinApp Driver failed to load Excel", new StackTrace(true).GetFrame(0).GetFileLineNumber(), new StackTrace(true).GetFrame(0).GetMethod(), excelSession);
    }

}

这是我的代码示例

try
{
    excelSession.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
    excelSession.FindElementByName("Blank workbook").Click();

    excelSession.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);
    excelSession.FindElementByName("Create").Click();

    skipTearDown = true;
}
catch (Exception)
{
    CommonMethods.ExceptionHandler("Couldn't find element", new StackTrace(true).GetFrame(0).GetFileLineNumber(), new StackTrace(true).GetFrame(0).GetMethod(), excelSession);
}

另一个典型的测试

public void newExcelWorkbook()
{
    try
    {
        excelSession.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
        excelSession.FindElementByName("Blank workbook").Click();
        excelSession.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
        excelSession.FindElementByName("Create").Click();
        excelSession.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
        excelSession.FindElementByName("New").Click();
        CommonMethods.IsElementDisplayed(excelSession, new StackTrace(true).GetFrame(0).GetFileLineNumber(), new StackTrace(true).GetFrame(0).GetMethod(), "CreateErrorIcon", "Error appeard while selecting the New button");
        excelSession.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
        excelSession.FindElementByName("E  Sample Data").Click();
        CommonMethods.IsElementDisplayed(excelSession, new StackTrace(true).GetFrame(0).GetFileLineNumber(), new StackTrace(true).GetFrame(0).GetMethod(), "CreateErrorIcon", "Error appeard while selecting the E Sample Data button");
        Thread.Sleep(4000);
        excelSession.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
    }
    catch (Exception)
    {
        CommonMethods.ExceptionHandler("Couldn't find element", new StackTrace(true).GetFrame(0).GetFileLineNumber(), new StackTrace(true).GetFrame(0).GetMethod(), excelSession);
    }
    TearDown();

}
4

1 回答 1

0

您目前拥有它的方式,您可以将它替换为catch (Exception)catch (NoSuchElementException)您找不到元素时抛出的特定于 Selenium 的异常。但是,我通常建议不要仅仅为了可能找不到元素而将整个测试包装在 try catch 中。

需要注意的一件事(您可能错过了)是它在找不到元素时NoSuchElementException抛出,FindElement并会告诉您它未能找到的元素的选择器。所以在你的情况下,如果

excelSession.FindElementByName("Blank workbook").Click();

未能在异常详细信息中找到将与选择器一起Blank workbook抛出的名称的元素。NoSuchElementException

还有一点需要注意:当您为驱动程序设置隐式等待持续时间时,它会在驱动程序对象的整个生命周期内保持不变 - 您可以在测试开始时设置一次,然后不再触摸它。如果您需要在整个测试过程中等待不同的时间段,您可以通过WebDriverWait类使用显式等待。

于 2017-06-27T10:09:49.607 回答