调用FindElements后,selenium停止工作

有时,当我调用Selenium FindElements(By)时,它将引发异常,并且驱动程序停止工作。参数“

BY”可能是问题所在:当我使用其他BY搜索相同的元素时,它起作用了。

我也可以看到,即使我的元素存在,或者之前曾调用过带有相同参数的相同方法,也不会阻止该方法引发异常。

我的方法是:

    public IWebElement SafeFindElement(By by)

{

try

{

IWebElement element;

if (_driver.FindElements(by).Any())

{

element = _driver.FindElements(by).First();

return element;

}

return null;

}

catch (NoSuchElementException)

{

return null;

}

catch (Exception)

{

return null;

}

}

一个BY值的示例并非始终有效(即使它存在于页面中):

By.CssSelector("input[data-id-selenium='entrar']")

例外:

WebDriverException

到远程WebDriver服务器的URL http:// localhost:46432 / session /

ef6cd2f1bf3ed5c924fe29d0f2c677cf /

elements的HTTP请求

在60秒后超时。

我不知道这可能是什么或导致这种不稳定的原因。有人建议吗?

我找到了一个临时解决方案。

早期,我尝试使用以下方法查找元素:

var element = browser

.FindElements(By.CssSelector("input[data-id-selenium='entrar']")

.FirstOrDefault();

要么

var element = browser

.FindElements(By.XPath("//input[@data-id-selenium='entrar']");

.FirstOrDefault();

现在,我正在使用:

var element = browser

.FindElements(By.TagName("input"))

.FirstOrDefault(x => x.GetAttribute("data-id-selenium") == "entrar");

他们做同样的事情,但是首先会无故抛出异常。另外,这是一个临时解决方案,我正在尝试解决仅使用选择器搜索元素的问题。

回答:

我发现了问题。我在所有测试服中都使用一种方法来等待加载消息关闭。但是它尝试使用jquery,但并非我的应用程序中的所有页面都使用它。

因此,Selenium放弃尝试在60秒后执行jquery并返回超时错误,但是此错误不会破坏Selenium驱动程序,只有FindElements才返回空列表。当它尝试返回空列表时,所有驱动器都坏了。

原始方法:

public void WaitLoadingMessage(int timeout)

{

while (timeout > 0)

{

try

{

var loadingIsVisible = _js.ExecuteScript("return $('#loading-geral').is(':visible');").ToString();

if (loadingIsVisible.ToLower() == "false")

break;

Thread.Sleep(1000);

timeout -= 1000;

}

catch (Exception ex)

{

if (!ex.Message.ToLower().Contains("$ is not defined"))

throw;

}

}

}

和更正:

public void WaitLoadingMessage(int timeout)

{

while (timeout > 0)

{

try

{

var loadingIsVisible = _js.ExecuteScript("return $('#loading-geral').is(':visible');").ToString();

if (loadingIsVisible.ToLower() == "false")

break;

Thread.Sleep(1000);

timeout -= 1000;

}

catch (Exception ex)

{

if (!ex.Message.ToLower().Contains("$ is not defined"))

throw;

break;

}

}

}

以上是 调用FindElements后,selenium停止工作 的全部内容, 来源链接: utcz.com/qa/398485.html

回到顶部