Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么WatiN只能通过a<;中的id查找;TR>;有时?_C#_Html Table_Watin_Webautomation - Fatal编程技术网

C# 为什么WatiN只能通过a<;中的id查找;TR>;有时?

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

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

从昨天正常工作的
中获取.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();