所以我使用的是if语句,我会假设如果该语句没有找到/不执行它应该做的事情,那么它应该抛出异常对吗?出于某种原因,我什么也没得到,if语句不起作用,但是我没有异常?
代码示例-
try
{
label1.Text = "Finding route";
string sxp = "//*[@id='s']";
if (driver.FindElements(By.XPath("sxp")).Count != 0)
{
driver.FindElement(By.XPath(sxp)).Click();
label1.Text = "sxp done";
}
}
catch
{
CheckRoute();
label1.Text = "Exception thrown";
}
我的程序返回“ if”语句后就没有响应,因为在此之前它将label1更改为指定的字符串。
答案 0 :(得分:2)
由于您正在使用if
语句进行检查,因此它与Exception throw
无关。删除if
,它将在找不到元素时抛出exception
。如果我没有记错的话,也用e.Message()
访问该消息。您的情况应该是ElementNotFoundException
。
try
{
label1.Text = "Finding route";
string sxp = "//*[@id='s']";
driver.FindElement(By.XPath(sxp)).Click();
label1.Text = "sxp done";
}
catch(Exception e)
{
CheckRoute();
label1.Text = "Exception thrown";
}
catch(ElementNotFoundException e)
{
Console.WriteLine(e.Message());
}
答案 1 :(得分:0)
我认为您对@DELETE
@Path("types/{typeId}")
@Produces(MediaType.APPLICATION_JSON)
public ResponseEnvelope.EmptyEnvelope deleteType(@PathParam("typeId") String deleteTypeId)
和它们的工作方式感到困惑。如果if
不评估为if
,则不会引发异常。在某些特殊情况下,当发生意外情况时会引发异常。例如,如果您使用true
而未找到该元素...则会抛出ElementNotFoundException。
对于您来说,您做对了事,并使用了driver.FindElement()
(复数),因此,您的代码不会引发异常。因此,因此,您可以删除.FindElements()
,并且其他简化操作将导致以下代码。
try-catch
我将label1.Text = "Finding route";
IReadOnlyCollection<IWebElement> routes = driver.FindElements(By.Id("s"));
if (routes.Count > 0)
{
routes.ElementAt(0).Click();
label1.Text = "sxp done";
}
else
{
CheckRoute();
label1.Text = "sxp not found";
}
的结果集合存储在变量.FindElements()
中,以便可以重用。您的代码两次进入页面。我删除了routes
,因为它是不需要的。