C# 为什么WatiN只能通过a<;中的id查找;TR>;有时?
我正在尝试在一个动态加载的网页上使用WatiN进行一些web自动化登录和检查订单状态。我正在使用Visual Studio C#Express 2010和IE浏览器 从昨天正常工作的C# 为什么WatiN只能通过a<;中的id查找;TR>;有时?,c#,html-table,watin,webautomation,C#,Html Table,Watin,Webautomation,我正在尝试在一个动态加载的网页上使用WatiN进行一些web自动化登录和检查订单状态。我正在使用Visual Studio C#Express 2010和IE浏览器 从昨天正常工作的中获取.Text的几段代码已经不起作用了。问题中的包含和,这是问题所在吗 我需要的文本也在中,但是标记没有定义ID或NAME属性,并且包含不同测试的内部文本/值。我不能编辑有问题的网站,否则这个问题早就解决了 罪魁祸首: public TableCell Status { get { retu
中获取.Text的几段代码已经不起作用了。问题中的
包含
和
,这是问题所在吗
我需要的文本也在
中,但是标记没有定义ID
或NAME
属性,并且包含不同测试的内部文本/值。我不能编辑有问题的网站,否则这个问题早就解决了
罪魁祸首:
public TableCell Status {
get {
return Document.TableCell(Find.ById("elementID"));
}
}
其他表格单元格不起作用,但文本字段和按钮都很好。我的直觉是,这个网站是一个很大的网站,WatiN可能会时不时地超时,试图找到其中的元素。不过,我很确定WatiN只在文档末尾抛出了ElementNotFoundException()
。(?)
表单元素在到达它们之前没有完全加载以进行调试,所以我认为这可能是一个问题,但是对于不是元素的for元素,它们都正确加载并且存在,对于它们来说都是正确的。此外,这只是一个调试问题,当我使用.dll文件将.exe复制到桌面时,它工作正常
我已经设置了我的调试器,使“启用属性求值和其他隐式函数调用”被禁用,但这没有帮助
该方法在我运行straight.exe时有效,但在visual studio中无效。然后,当我重新生成相同的代码并再次将.exe复制到桌面时,它停止工作
更新:很明显,要连接的网站的网站管理员做了一些改变,破坏了很多东西,所以也许我的代码还是不错的?当我收到他的回复时,我会再次更新。那么也许你可以尝试以下方式:
Document.WaitForComplete();
或
为了让tablecell出现 我遇到过各种各样的WatiN测试运行人员无法“查看”页面上的元素的问题……例如链接。我发现的一个修复方法是以提升的权限在和下打开testrunner帐户。我认为watin中的每次调用后都会调用waitUntilExists。我通常在我的代码中再次调用它,但不需要先调用它,谢谢您的回复!我尝试了你的两个想法,但遇到了两个问题: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;}}
中,它也可能永远持续下去,每次循环都会从第一个开始计时和重新启动(时间输出可能是您在上次编辑代码时添加了一个小错误。我没有编辑它,这是有趣的部分。当我今天关闭它时,它正在工作,第二天早上它坏了,无法读取元素…感谢您的输入!我不确定您所说的“测试运行程序”是什么意思。如果您指的是我的WatiN automated logger inner,那么它已经在我的管理员帐户下运行。:(如果您指的是我测试代码的工具,我使用的是VS调试器,我认为它也在我的管理员权限下运行。:(…通过test runner,我指的是实际执行测试的工具。)(NUnit控制台、Gallio Icarus、TestDriven.Net、内置的Visual Studio测试运行程序等)。有时,测试运行程序也允许您进行调试。顺便说一句,当我们讨论术语和定义时,使用“logger inner”非常好;)这让我笑了。
TableCell tc = Document.TableCell(Find.ById("elementID"));
tc.WaitUntilExists();