2

我特别询问我的try/catch块可能存在什么问题,这在与此“重复”链接的问题中没有描述。

我遇到了一个问题,我试图捕获 aStaleElementReferenceException然后再次查找元素,但由于某种原因,异常没有被捕获。我有下面的方法,当我运行测试时,我得到一个StaleElementReferenceException当这条线被执行时,value = element.GetAttribute(attributeName);. 我假设(可能很糟糕)在 a 中添加检查try/catch并专门寻找异常将允许我继续尝试,直到 selenium 能够再次找到该元素。问题是由于某种原因异常没有被捕获并且测试立即退出。奇怪的是,如果我将 catch 块更改为只捕获一般Exception情况,它就可以正常工作。我对此担心的是,尽管我可能会陷入永远不会退出的循环。我正在使用页面对象模型来初始初始化元素。

bool isStale = false;
string value = "";
do
{
    try
    {
        value = element.GetAttribute(attributeName);
        isStale = false;
    }
    catch (StaleElementReferenceException)
    {
        element = driver.FindElement(By.XPath(xPath));
        isStale = true;
    }

} while (isStale == true);
return value;

这是堆栈跟踪的一部分:

测试失败并出现错误:System.Reflection.TargetInvocationException:调用目标已引发异常。---> OpenQA.Selenium.StaleElementReferenceException: stale element reference: element is not attach to the page document (Session info: chrome=71.0.3578.98) (Driver info: chromedriver=2.43.600210 (68dcf5eebde37173d4027fa8635e332711d2874a),platform=Windows NT 10.0 .17134 x86_64) 在 OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse) 在 OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary 2 parameters) at OpenQA.Selenium.Remote.RemoteWebElement.Execute(String commandToExecute, Dictionary2 parameters) 在 OpenQA.Selenium.Remote.RemoteWebElement.GetAttribute(String attributeName)

4

0 回答 0