3

由于我的测试语句无法找到该元素,我面临一些问题,即测试只是挂在那里(浏览器打开并且无法进行下一个测试)。

我的 TestStatemet 是这样的:

driver.findElement(By.xpath("//input[@name='AID' and contains(@value,'sampleDataThatwillNotFound')]"));

测试仅在通过 XPATH 查找时挂起,在通过 NAME/ID 查找时没有问题。我已将超时设置为 60 秒,在 60 秒后,它仍然挂起。

以前有人遇到过这个问题吗?或者有人知道如何解决这个问题吗?

4

5 回答 5

5

好吧,我遇到了同样的问题,并在webdriver api doc中发现了这一点: findElement不应该用于查找不存在的元素,findElements(By)而是使用并断言零长度响应。

所以我使用类似的东西

List<WebElement> found = driver.findElements(By.id("elementid"));
if (found.size() > 0) 
{
    // get the 1st element
} else {
    // time out
}

来解决这个问题。findElements在我的情况下,隐式超时可以正常工作。

于 2013-02-02T11:45:19.310 回答
0

试试这个定位器

driver.findElement(By.xpath("//input[@name='AID'][contains(@value,'sampleDataThatwillNotFound')]"));
于 2013-01-22T16:13:41.260 回答
0

我从 Google Groups 的 darrell 那里得到了一些反馈,我同意他的看法,以下是他的反馈: https ://groups.google.com/forum/#!topic/webdriver/Vt0DuQHOAg8

*我还没有看到这些定位器挂起,但一切皆有可能。通常,如果 DOM 很大和/或复杂,则组合定位器(一个包含包含加和的)可能会使其非常慢。我的一般经验是定位器越复杂,它需要的时间就越长。花费的时间越长,您看到 NoSuchElementException 的可能性就越大。可能是您正在做的其他事情导致了第二个问题,即挂起。and 语句是乘法的。所以 @name='AID' 比较快。没有子字符串检查。它要么匹配,要么不匹配。所以这个定位器将按 n 顺序运行,其中 n 是输入标签的数量。像 contains(@value, 'someString') 这样的定位器必须扫描每个属性的每个标签,以匹配每个可能的子字符串。如果 contains() 实现得好,它可能比蛮力快一点,但 DOM 中的数据类型将决定此搜索需要多长时间。肯定会很慢。现在,如果您使用 contains() 搜索(相对较慢)和完全匹配(相对较快),然后查找两个匹配项的 AND,您就是将它们相乘。两个完全匹配将是 n 次 n 次(或 n 次方)。不是很好。一个包含的精确匹配时间真的很糟糕。根据 DOM,它可能是 n 立方的。这意味着如果 n 需要 10 秒,则 n 的立方为 10 * 10 * 10 秒(1000 秒或超过 16 分钟)。如果 DOM 导致事情变得更糟,您可能会看到精确匹配是几秒钟,而组合是几小时。达雷尔* 现在,如果您使用 contains() 搜索(相对较慢)和完全匹配(相对较快),然后查找两个匹配项的 AND,您就是将它们相乘。两个完全匹配将是 n 次 n 次(或 n 次方)。不是很好。一个包含的精确匹配时间真的很糟糕。根据 DOM,它可能是 n 立方的。这意味着如果 n 需要 10 秒,则 n 的立方为 10 * 10 * 10 秒(1000 秒或超过 16 分钟)。如果 DOM 导致事情变得更糟,您可能会看到精确匹配是几秒钟,而组合是几小时。达雷尔* 现在,如果您使用 contains() 搜索(相对较慢)和完全匹配(相对较快),然后查找两个匹配项的 AND,您就是将它们相乘。两个完全匹配将是 n 次 n 次(或 n 次方)。不是很好。一个包含的精确匹配时间真的很糟糕。根据 DOM,它可能是 n 立方的。这意味着如果 n 需要 10 秒,则 n 的立方为 10 * 10 * 10 秒(1000 秒或超过 16 分钟)。如果 DOM 导致事情变得更糟,您可能会看到精确匹配是几秒钟,而组合是几小时。达雷尔* 这意味着如果 n 需要 10 秒,则 n 的立方为 10 * 10 * 10 秒(1000 秒或超过 16 分钟)。如果 DOM 导致事情变得更糟,您可能会看到精确匹配是几秒钟,而组合是几小时。达雷尔* 这意味着如果 n 需要 10 秒,则 n 的立方为 10 * 10 * 10 秒(1000 秒或超过 16 分钟)。如果 DOM 导致事情变得更糟,您可能会看到精确匹配是几秒钟,而组合是几小时。达雷尔*

所以为了解决这个问题,我认为是时候强制开发团队应用通用开发实践为每个元素/控件设置唯一的 id。这样测试自动化脚本就可以直接通过 ID 执行任何验证/输入,而不是 xPath。

于 2013-02-08T01:56:44.013 回答
0

我在上面尝试了一些答案,但仍然遇到同样的问题..我切换回旧的 firefox 版本 17.0.3 ....一切都解决了..有点有趣..那些面临同样问题的人可以在 FF 版本 17.0 中尝试.3

于 2013-05-15T02:38:30.597 回答
0

升级 Firefox(25 到 26)和 Selenium(2.37.1 到 2.39.0 驱动程序 + 服务器)后,我遇到了同样的问题。没有抛出异常,永远挂起等。它通过删除implicitlyWait声明得到了“解决”。不是一个真正的解决方案,但在我的情况下已经足够好了。

于 2014-01-22T14:17:59.250 回答