我有以下代码用于从给定列表中选择一个选项,它通常可以工作,但有时它会在第二个if上失败并出现NoSuchElement异常。我的印象是,如果它没有找到元素,它只会再次回到循环中。我相信这个解释很简单......任何人都可以启发我吗?
public static void selectFromList(String vList, String vText, IWebDriver driver)
{
for (int sec = 0; ; sec++)
{
System.Threading.Thread.Sleep(2500);
if (sec >= 10) Debug.Fail("timeout : " + vList);
if (driver.FindElement(By.Id(ConfigurationManager.AppSettings[vList])).Displayed) break;
}
new SelectElement(driver.FindElement(By.Id(ConfigurationManager.AppSettings[vList]))).SelectByText(vText);
}
答案 0 :(得分:4)
不必尝试捕获每个实例,为什么不创建一个帮助/扩展方法来为您处理。这里返回元素,如果不存在则返回null。然后你可以简单地为.exists()使用另一种扩展方法。
IWebElement element = driver.FindElmentSafe(By.Id(“the id”));
/// <summary>
/// Same as FindElement only returns null when not found instead of an exception.
/// </summary>
/// <param name="driver">current browser instance</param>
/// <param name="by">The search string for finding element</param>
/// <returns>Returns element or null if not found</returns>
public static IWebElement FindElementSafe(this IWebDriver driver, By by)
{
try
{
return driver.FindElement(by);
}
catch (NoSuchElementException)
{
return null;
}
}
bool exists = element.Exists();
/// <summary>
/// Requires finding element by FindElementSafe(By).
/// Returns T/F depending on if element is defined or null.
/// </summary>
/// <param name="element">Current element</param>
/// <returns>Returns T/F depending on if element is defined or null.</returns>
public static bool Exists(this IWebElement element)
{
if (element == null)
{ return false; }
return true;
}
答案 1 :(得分:2)
您可以尝试this问题中的一个答案:
public static IWebElement FindElement(this IWebDriver driver, String vList, String vText, int timeoutInSeconds)
{
By selector = By.Id(ConfigurationManager.AppSettings[vList])
if (timeoutInSeconds > 0)
{
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));
return wait.Until(drv => drv.FindElement(selector));
}
return driver.FindElement(selector);
}
答案 2 :(得分:1)
所以,基本上你应该在for循环中做一些异常处理并捕获这个异常而什么都不做。在Java中,它由try
和catch
块完成。但是因为我不知道C#你必须知道它是如何用这种语言完成的