C#如何从NoSuchElementException获取方法和选择器

时间:2014-10-29 11:12:52

标签: c# selenium selenium-webdriver

我使用的是C#.NET 4和Selenium WebDriver 2.44.0.0以及chromeDriver。 当它找不到元素时,Selenium抛出错误:

no such element
(Session info: chrome=38.0.2125.104)
(Driver info: chromedriver=2.10.267521,platform=Windows NT 6.1 SP1 x86_64)


但我想知道缺少哪个元素。我看到一些文章说它可以显示这样的细节:

OpenQA.Selenium.NoSuchElementException: Unable to locate element: {"method":"id","selector":"hello"}


谁能告诉我如何从NoSuchElementException获取方法和选择器?


这是我的代码

try
{
     for(int i=0; i<10; i++)
     {
          string className = "items-" + i;
          IWebElement t = Driver.FindElement(By.CssSelector("[class$='" + className + "'] > span"));
          t.Click();
     }
}
catch (NoSuchElementException ex)
{
     Logger.Error("Error: " + ex.Message);
     Debug.WriteLine(ex.Message);
}

2 个答案:

答案 0 :(得分:2)

.ToString()定位器的By方法会返回您要求的内容。

据我所知,异常本身不包含这些信息。但是,直接处理异常并将其与引发它的FindElement()方法中使用的定位器函数相关联。

例如,如果找不到第5次迭代中的元素,则下面的代码将生成此消息

  

错误:没有这样的元素

     

错误:无法使用函数By.CssSelector找到元素:[class $ ='items-4']&gt;跨度

By locator;     // need to declare this outside the scope of the try block
                // so it can be accessed in the catch block
try
{
     for(int i=0; i<10; i++)
     {
          string className = "items-" + i;
          locatorFunction = By.CssSelector("[class$='" + className + "'] > span")
          IWebElement t = Driver.FindElement(locatorFunction);
          t.Click();
     }
}
catch (NoSuchElementException ex)
{
     Logger.Error("Error: " + ex.Message);
     Logger.Error("Error: Unable to find element using function " + locatorFunction.ToString());
}

答案 1 :(得分:1)

请参阅.net found here的selenium API文档。 但是,我不认为它会在异常跟踪方面给你你想要的东西。打印您正在使用的选择器,这可以帮助您识别抛出错误的元素