【问题标题】:Why does WatiN only find by id from a <TR> some of the time?为什么 WatiN 有时只能通过 <TR> 中的 id 找到?
【发布时间】:2012-10-01 13:10:05
【问题描述】:

我正在尝试做一些网络自动化来登录并在动态加载的网页上使用 WatiN 检查订单状态。我正在使用 Visual Studio C# Express 2010 和 IE 浏览器。

&lt;TD&gt; 获取 .Text 的几段代码昨天工作得很好,但现在不再工作了。有问题的&lt;TD&gt; 包含&lt;NOBR&gt;&lt;INPUT&gt;,这是问题所在吗?

我需要的文本也在&lt;INPUT&gt; 中,但标签没有定义IDNAME 属性,并且包含在测试之间不一样的内部文本/值。我无法编辑有问题的网站,否则这在很久以前就已经修复了。

罪魁祸首:

public TableCell Status {
    get {
        return Document.TableCell(Find.ById("elementID")); 
    }
}

其他 TableCells 不工作,但 TextFields 和按钮很好。我的预感是该网站很大,WatiN 可能偶尔会超时,试图找到该元素。不过,我相当肯定,WatiN 只是在到达文档末尾时才抛出 ElementNotFoundException()。 (???)

表单元素在到达它们之前没有完全加载以进行调试,所以我认为这可能是一个问题,但不是元素的 for 元素都已正确加载并且所有元素都存在。此外,这只是一个调试问题,当我使用 .dll 文件将 .exe 复制到桌面时,它运行良好。

我已经设置了我的调试器,以便禁用“启用属性评估和其他隐式函数调用”,但这没有帮助。

当我运行直接 .exe 但不是通过 Visual Studio 时,该方法有效。然后当我重新构建相同的代码并再次将 .exe 复制到桌面时它停止工作。

更新:显然,要连接的网站的网络管理员进行了一些更改,破坏了很多东西,所以也许我的代码毕竟没问题?当我得到他的回复时,我会再次更新。

【问题讨论】:

  • 可能您在上次编辑代码时添加了一个小错误。
  • 我没有编辑它,这是有趣的部分。当我当天关闭它时它正在工作,第二天早上它坏了,无法读取 元素......

标签: c# html-table watin webautomation


【解决方案1】:

那么也许您可以尝试以下方法:

Document.WaitForComplete();

TableCell tc = Document.TableCell(Find.ById("elementID"));
tc.WaitUntilExists();

为了让表格单元出现?

【讨论】:

  • 我认为 waitUntilExists 在每次调用 watin 后都会调用。我通常在我的代码中再次调用它,但不需要它
  • 首先,感谢您的回复!我尝试了你的两个想法,但遇到了几个问题:WatiN.Core.Document 不包含Document.WaitForComplete() 的定义。但是,它确实有一个WaitUntilContainsText("sometext") 函数,我在检索表格单元格之前调用了该函数。我使用的文本仅在单元格出现时出现,所以我想这不是浏览器中正在加载的网站的问题。在第二种解决方案中,异常实际上是在Find.ByID("ID") 处引发的,因此永远不会到达tc.WaitUntilExists();
  • @Kizz246 如果您希望找到此表格单元格,您可以尝试在一段时间内将其括起来?
  • @t3hn00b 谢谢,但是我认为它会无限旋转等待该元素。在它引发异常之后,我相信它会超时......所以即使我把它放入while(true){ try{ if(page.Status == "OK") //do stuff } catch(Exception e) { continue; } },它也可能会永远持续下去,超时并从每个循环的第一格重新开始。
  • 不是一会儿(真),而是一会儿(超时
【解决方案2】:

我遇到了各种 WatiN 测试运行者无法“看到”页面上的元素...例如链接的问题。我发现的一种解决方法是在具有提升权限的帐户下打开测试运行程序。

【讨论】:

  • 感谢您的意见!我不确定您所说的“测试运行器”是什么意思。如果您的意思是我的 WatiN 自动 logger-inner,那么它已经在我的管理员帐户下运行。 :( 如果你的意思是我测试我的代码的东西,我正在使用 VS 调试器,我 认为 也以我的管理员权限运行。:((
  • ...测试运行程序是指实际执行测试的工具(NUnit Console、Gallio Icarus、TestDriven.Net、内置的 Visual Studio 测试运行程序等)。有时,测试运行程序也允许您进行调试。顺便说一句,当我们讨论术语和定义时,使用 'logger-inner' 感觉很好;)这让我笑了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-08
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
  • 2020-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多