Appium NoSuchElementException:使用给定的搜索参数在页面上找不到元素

Appium NoSuchElementException:使用给定的搜索参数在页面上找不到元素,appium,hybrid-mobile-app,appium-ios,Appium,Hybrid Mobile App,Appium Ios,我使用的代码: public class SafariTest { private static IOSDriver iOSDriver; private WebElement loginSettingsButton; @Before public void preTest() throws MalformedURLException { DesiredCapabilities capabilities = new DesiredCapabilities(); capabili

我使用的代码:

public class SafariTest {
private static IOSDriver iOSDriver;
private WebElement loginSettingsButton;
@Before
public void preTest() throws MalformedURLException {
    DesiredCapabilities capabilities = new DesiredCapabilities();

    capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "xxxx");
    capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "iOS");
    capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "12.1");

    capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "XCUITest");
    capabilities.setCapability(MobileCapabilityType.UDID, "xxxx");
    capabilities.setCapability(MobileCapabilityType.APP,"/xxx.app");

    iOSDriver = new IOSDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);

    //webDriver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
}
@Test
public void testCase(){
    WebDriverWait wait = new WebDriverWait(iOSDriver, 15); 
loginSettingsButton = iOSDriver.findElement(By.name("loginSettingsButton"));
loginSettingsButton.click();
}

@After
public void finishTest(){
    //  webDriver.quit();
}

public static void setContextToWebview(){
    Set<String> availableContexts = iOSDriver.getContextHandles();
    availableContexts.stream()
            .filter(context -> context.toLowerCase().contains("webview"))
            .forEach(newcontext -> iOSDriver.context(newcontext));
}

}
公共类SafariTest{
专用静态IOSDriver;
私有WebElement登录设置按钮;
@以前
public void preTest()引发错误的DurLexException{
DesiredCapabilities=新的DesiredCapabilities();
能力.setCapability(MobileCapabilityType.DEVICE_NAME,“xxxx”);
能力.setCapability(MobileCapabilityType.PLATFORM_NAME,“iOS”);
能力。设置能力(MobileCapabilityType.PLATFORM_版本,“12.1”);
能力.setCapability(mobileCababilityType.AUTOMATION_NAME,“XUITest”);
能力.setCapability(MobileCapabilityType.UDID,“xxxx”);
capabilities.setCapability(MobileCapabilityType.APP,“/xxx.APP”);
iOSDriver=新iOSDriver(新URL(“http://127.0.0.1:4723/wd/hub(能力),;
//webDriver=新的AppiumDriver(新的URL(“http://127.0.0.1:4723/wd/hub(能力),;
}
@试验
公共无效测试用例(){
WebDriverWait wait=新的WebDriverWait(iOSDriver,15);
loginSettingsButton=iOSDriver.findElement(By.name(“loginSettingsButton”);
登录设置按钮。单击();
}
@之后
公共void finishTest(){
//webDriver.quit();
}
公共静态无效setContextToWebview(){
设置availableContexts=iOSDriver.getContextHandles();
availableContexts.stream()
.filter(context->context.toLowerCase().contains(“webview”))
.forEach(newcontext->iOSDriver.context(newcontext));
}
}
我得到的错误是:

org.openqa.selenium.NoSuchElementException:使用给定的搜索参数在页面上找不到元素。 有关此错误的文档,请访问: 构建信息:版本:“3.141.59”,修订版:“e82be7d358”,时间:“2018-11-14T08:17:03” 系统信息:主机:'xxxx.local',ip:'xxxxx',os.name:'Mac os X',os.arch:'x86_64',os.version:'10.14.4',java.version:'1.8.0_152-release' 驱动程序信息:io.appium.java_client.ios.IOSDriver 功能{app:xxx,automationName:xguitest,browserName:,databaseEnabled:false,deviceName:xxxx,javascriptEnabled:true,locationContextEnabled:false,networkConnectionEnabled:false,platform:MAC,platformName:iOS,platformVersion:12.1,takesScreenshot:true,udid:xxxx…,webStorageEnabled:false} 会话ID:a2b7627f-9792-4df3-874b-96CED13C185 ***元素信息:{Using=name,value=loginSettingsButton} 位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) 位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 位于java.lang.reflect.Constructor.newInstance(Constructor.java:423) 位于org.openqa.selenium.remote.http.w3chttprosecodec.createException(w3chttprosecodec.java:187) 在org.openqa.selenium.remote.http.w3chttrpresponsecodec.decode(w3chttrpresponsecodec.java:122) 位于org.openqa.selenium.remote.http.w3chttprosecodec.decode(w3chttprosecodec.java:49) 位于org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158) 在io.appium.java_client.remote.AppiumCommandExecutor.execute(AppiumCommandExecutor.java:239) 位于org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552) 在io.appium.java_client.DefaultGenericMobileDriver.execute(DefaultGenericMobileDriver.java:42) 在io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:1) 位于io.appium.java_client.ios.IOSDriver.execute(IOSDriver.java:1) 位于org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:323) 位于io.appium.java_client.DefaultGenericMobileDriver.findelelement(DefaultGenericMobileDriver.java:62) 位于io.appium.java_client.AppiumDriver.findElement(AppiumDriver.java:1) 位于io.appium.java_client.ios.IOSDriver.findElement(IOSDriver.java:1) 位于org.openqa.selenium.remote.RemoteWebDriver.findElementByName(RemoteWebDriver.java:404) 位于io.appium.java_client.DefaultGenericMobileDriver.findElementByName(DefaultGenericMobileDriver.java:118) 位于io.appium.java_client.AppiumDriver.findElementByName(AppiumDriver.java:1) 位于io.appium.java_client.ios.IOSDriver.findElementByName(IOSDriver.java:1) 位于org.openqa.selenium.By$ByName.findElement(By.java:284) 位于org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:315) 位于io.appium.java_client.DefaultGenericMobileDriver.findelelement(DefaultGenericMobileDriver.java:58) 位于io.appium.java_client.AppiumDriver.findElement(AppiumDriver.java:1) 位于io.appium.java_client.ios.IOSDriver.findElement(IOSDriver.java:1) 位于com.example.appiumapplication.SafariTest.testCase(SafariTest.java:63) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:498) 位于org.junit.runners.model.FrameworkMethod$1.runReflectVeCall(FrameworkMethod.java:50) 位于org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 位于org.junit.runners.model.FrameworkMethod.invokeeexplosive(FrameworkMethod.java:47) 位于org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 位于org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) 位于org.junit.internal.runners.statements.runafter.evaluate(runafter.java:27) 位于org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 位于org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 位于org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 在org.junit.runners.ParentRunner
loginSettingsButton = iOSDriver.findElementByAccessibiltyId("loginSettingsButton");