0

例如:在您的桌面上启动 Outlook。请注意如何有一个“启动加载屏幕”,我拥有的驱动程序将查看这个可执行文件并等待 x 秒,然后再尝试单击“新电子邮件”按钮。但是,当它到达出现新电子邮件按钮的页面时,却找不到它。奇怪...嗯,好吧,让我们启动应用程序,但让它触发已经在进程中的可执行文件。它寻找新的电子邮件按钮并发现它没有问题。

我唯一能想到的是驱动程序加载可执行文件,然后可执行文件会大幅更改其数据或其他东西。然后突然间我需要建立一个新的驱动程序。但我不认为这是解决问题的方法。

[TestInitialize]
public void TestMethod1()
{            
    options.AddAdditionalCapability("app", @"C:\Program Files (x86)\<PATH>");
    _driver = new WindowsDriver<WindowsElement>(new Uri("http://127.0.0.1:4723"), options);
    System.Threading.Thread.Sleep(5000); 
}

[TestMethod]
public void TEST()
{
    LoginPage page = new LoginPage(new WindowsDriver<WindowsElement>(new Uri("http://127.0.0.1:4723"), options)); // Notice how i am building a new driver just for this page.  This is VERY heavy.
    page.Login("USERNAME", "PASSWORD");
}
4

1 回答 1

0

您可能遇到“启动画面问题”。 这是关于如何处理它的解释。

简而言之,winappdriver 为它遇到的每个新窗口创建一个新的窗口句柄。由于启动屏幕是一个单独的窗口,因此在您想要单击“新电子邮件”按钮时,您应该有 2 个可用的窗口句柄。最近的窗口句柄将是最高索引。

您可以像这样在窗口句柄之间切换(从链接复制):

// Return all window handles associated with this process/application.
// At this point hopefully you have one to pick from. Otherwise you can
// simply iterate through them to identify the one you want.
var allWindowHandles = session.WindowHandles;
// Assuming you only have only one window entry in allWindowHandles and it is in fact the correct one,
// switch the session to that window as follows. You can repeat this logic with any top window with the same²
// process id (any entry of allWindowHandles)
session.SwitchTo().Window(allWindowHandles[0]);

也看看这个答案。也可能有用。

于 2019-09-17T11:40:24.700 回答