【发布时间】:2019-06-18 23:23:51
【问题描述】:
我正在使用 win 应用程序驱动程序为桌面应用程序构建一些测试。一切都很好,但无法使用我之前在 Web 应用程序中使用的页面工厂模型。问题是如果一个元素还没有完成加载,那么在访问该元素之前任何类型的等待都不会运行。一旦我调用等待它就会失败
Waits.WaitForDisplayedEnabled(Scan.BarcodeField, Driver, 3);
...一旦访问它(并且在它可以运行之前),代码就会跳转到我设置的“页面”中的元素并说找不到它。我知道在调试时可以找到元素,所以元素定位器很好。有没有更好的方法来设置页面中的元素而不能使用页面工厂模型? Page 工厂似乎不会立即尝试访问该元素,这就是它运行良好的原因。以下是我如何设置元素...
public WindowsElement BarcodeField => Driver.FindElementByXPath("//*[@Name='Barcode' and @ClassName='TextBlock']");
【问题讨论】:
-
您应该将定位器存储在一个字符串中并将其传递给等待,而不是传递 WebElement。在您的情况下,您首先调用
FindElement,然后将其传递给等待。这意味着该元素已经存在。 -
同意@Fenio。另一种方法是您可以在 Waits.WaitForDisplayedEnabled 之前添加线程睡眠时间,但不推荐。
-
谢谢两位。更新了更改并且工作正常。
标签: c# selenium winappdriver