当使用 Java 代码通过 Appium 进行控制时,无法在 Outlook 邮件上使用 findElementByName

Can't use findElementByName on Outlook mail when control via Appium with Java code

我正在为我的项目导入 Appium (java-client-7.3.0.jar) 和 Selenium 库。 我的函数:

import org.junit.*;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.By.ByClassName;
import org.openqa.selenium.By.ByName;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.remote.DesiredCapabilities;

import java.util.ArrayList;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.net.URL;

import io.appium.java_client.android.nativekey.KeyEvent;
import io.appium.java_client.windows.WindowsDriver;
import io.appium.java_client.windows.WindowsElement;

import java.awt.RenderingHints.Key;
import java.awt.Robot;
import java.lang.reflect.Array;

public class WinAppEmail {
    private static WindowsDriver<WindowsElement> session = null;

     public void setup() {
            try {
                DesiredCapabilities capabilities = new DesiredCapabilities();
                capabilities.setCapability("app", "C:\Program Files\Microsoft Office\Office16\OUTLOOK.EXE");

                session = new WindowsDriver<WindowsElement>(new URL("http://127.0.0.1:4723"), capabilities);

                session.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

                String strCurrentWindow="" ; 
//              strCurrentWindow = session.getWindowHandle();  // => Can't not get current handle

//              Robot robot = new Robot();
//              robot.keyPress(java.awt.event.KeyEvent.VK_CONTROL);
//              robot.keyPress(java.awt.event.KeyEvent.VK_N);
//              robot.keyRelease(java.awt.event.KeyEvent.VK_N);
//              robot.keyRelease(java.awt.event.KeyEvent.VK_CONTROL);

                session.findElementByName("New Email").click(); // => Can't find 


            }catch(Exception e){
                e.printStackTrace();
            } finally {
            }
        }
}

我的代码有 2 个问题。 1.无法获取当前window句柄(strCurrentWindow = session.getWindowHandle();) 2. Outlook邮件无法点击按钮(session.findElementByName("New Email").click();) 请帮我!谢谢大家

exception: Feb 07, 2020 3:55:42 PM io.appium.java_client.remote.AppiumCommandExecutor lambda[=12=] INFO: Detected dialect: OSS --------------- Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils at io.appium.java_client.internal.ElementMap.getElementClass(ElementMap.java:77) at io.appium.java_client.internal.JsonToMobileElementConverter.newRemoteWebElement(JsonToMobileElementConverter.java:67) at io.appium.java_client.internal.JsonToMobileElementConverter.apply(JsonToMobileElementConverter.java:57) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:561) at io.appium.java_client.DefaultGenericMobileDriver.execute(DefaultGenericMobileDriver.java:41) at io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:1) at io.appium.java_client.windows.WindowsDriver.execute(WindowsDriver.java:1) at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:323) at io.appium.java_client.DefaultGenericMobileDriver.findElement(DefaultGenericMobileDriver.java:61) at io.appium.java_client.AppiumDriver.findElement(AppiumDriver.java:1) at io.appium.java_client.windows.WindowsDriver.findElement(WindowsDriver.java:1) at org.openqa.selenium.remote.RemoteWebDriver.findElementByName(RemoteWebDriver.java:404) at io.appium.java_client.DefaultGenericMobileDriver.findElementByName(DefaultGenericMobileDriver.java:117) at io.appium.java_client.AppiumDriver.findElementByName(AppiumDriver.java:1) at io.appium.java_client.windows.WindowsDriver.findElementByName(WindowsDriver.java:1) at Allegro.WinAppEmail.setup(WinAppEmail.java:59) at Allegro.MainFunction.main(MainFunction.java:9) Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang3.StringUtils at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) ... 17 more

你能打开 Outlook 吗? 如果不是,则尝试将相同的路径更改为:

C:/Program Files (x86)/Microsoft Office/root/Office16/OUTLOOK.EXE

我能够使用此路径完成这两项操作,即获取 windowHanlde 以及单击新邮件。