【发布时间】:2012-04-17 04:45:51
【问题描述】:
我在网页上有一组记录,当单击记录时,会显示一个“删除”链接(实际上“未隐藏”,因为它实际上总是存在)。
当我试图访问这个“删除”链接时,我正在使用它的值。
当我使用Driver.FindElement 时,它会返回 first 删除链接,即使它是隐藏的,因此无法单击它(不应该因为它不是正确的链接)。
所以,我基本上想做的就是只找到 非隐藏 链接。下面的代码有效,但是当它遍历每个删除链接时,我担心它可能效率低下。
有没有更好的办法?
public class DataPageModel : BasePageModel
{
private static readonly By DeleteSelector = By.CssSelector("input[value=\"Delete\"]");
private IWebElement DeleteElement
{
get
{
var elements = Driver.FindElements(DeleteSelector);
foreach (var element in elements.Where(e => e.Displayed))
{
return element;
}
Assert.Fail("Could not locate a visible Delete Element");
return null;
}
}
}
【问题讨论】:
-
Selenium 测试很慢,所以这段代码可能不会增加 1% 的执行时间......我会更担心你的代码的可读性:意图的沟通。您是在寻找一个特定的链接还是任何非隐藏的删除链接。如果一个特定的,最好通过 ID 查找。如果有任何链接,我会为该属性找到更好的名称。
-
即使只有 1%,当你多次调用它时,它也会产生滚雪球效应。接下来你知道你的构建需要几小时而不是几分钟。
-
即使您在同一个测试中调用此方法 100 次,它也可能只花费您的服务器渲染一个页面所需时间的一小部分。为了缩短构建时间,测量和优化实际上需要很长时间的部分。这个方法不行。
标签: c# selenium webdriver selenium-webdriver pageobjects