尝试使用WinAppDriver模拟(自动化)通过outlook发送电子邮件,识别“新电子邮件”元素并打开新窗口但在新窗口中无法识别“收件人”,“CC”等控件。
我怀疑新的Windows会话不适用于驱动程序。
try {
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setPlatform(Platform.WIN10);
//capabilities.setCapability("appTopLevelWindow", "0xBB880A");
capabilities.setCapability("app", "C:\\Program Files\\Microsoft Office\\Office14\\OUTLOOK.exe");
outlookSession = new WindowsDriver(new URL("http://127.0.0.1:4723"), capabilities);
outlookSession.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
} catch (MalformedURLException e) {
e.printStackTrace();
}
newEmail = outlookSession.findElementByName("New E-mail");
System.out.println("newEmail:::::: " + newEmail);
newEmail.click();
outlookSession.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
outlookSession.findElementByName("To").sendKeys("<email>"); (the 'To' element is not recognized.
答案 0 :(得分:2)
我认为您面临的问题是因为Outlook会为您的新电子邮件创建一个新的Windows。这将导致窗口不属于您当前的会话。解决此问题的最佳方法是创建桌面会话,找到新窗口,然后附加新会话,然后从那里控制新窗口。
希望这有帮助。
〜吉勒
答案 1 :(得分:0)
switchTo()。activeElement()对我不起作用,因此我必须创建一个新会话以与新电子邮件页面上的元素进行交互。希望这可以帮助其他与我有相同问题的人
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("app", "Root");
driver = new WindowsDriver<>(new URL("http://127.0.0.1:4723"), capabilities);
答案 2 :(得分:0)
您必须编写将窗口从Outlook切换到新电子邮件的代码。
Thread.Sleep(TimeSpan.FromSeconds(5));
var allWindowHandles1 = driver.WindowHandles;
driver.SwitchTo().Window(allWindowHandles1[0]);
只要有新窗口,就必须将控件从一个窗口切换到另一个窗口。