2016-07-18 2 views
0

Java 언어로 된 Appium을 사용하여 자동화 된 테스트를 수행하려고합니다. 그러나 요소에 액세스하려면 브라우저에서 webview를 사용하여 CSS Selector를 찾으십시오. 내 질문은 Java 언어로 Appium을 사용하여 webview로 전환하는 방법입니까? 나는 appium이 셀레늄을 지원한다는 것을 알았고 driver.switchTo().window("WEBVIEW")10을 사용할 수 있지만 사실은 그렇지 않습니다. 이제 인터넷에서 찾은이 코드를 사용하지만 스크립트를 실행하면 TestNG가 실패 또는 성공 또는 건너 뛰기를 표시하지 않고 장치의 응용 프로그램을 닫은 다음 닫습니다. 어떤 도움이 필요합니까? 추신 :이 포럼에서 com.xxx.xxx를 myApps로 변경했습니다. css 선택기를 사용하여 자동 테스트를 실행하는 방법 Appium java

package com.android.test; 
    import java.net.URL; 
    import java.util.Set; 
    import java.util.concurrent.TimeUnit; 

    import org.junit.Test; 
    import org.openqa.selenium.By; 
    import org.openqa.selenium.WebDriver; 
    import org.openqa.selenium.remote.CapabilityType; 
    import org.openqa.selenium.remote.DesiredCapabilities; 
    import org.testng.annotations.AfterTest; 
    import org.testng.annotations.BeforeTest; 

    import io.appium.java_client.AppiumDriver; 
    import io.appium.java_client.android.AndroidDriver; 
    import java.net.MalformedURLException; 
    import org.openqa.selenium.WebElement; 
    import org.openqa.selenium.support.ui.ExpectedConditions; 
    import org.openqa.selenium.support.ui.Select; 
    import org.openqa.selenium.support.ui.WebDriverWait; 
    import static org.junit.Assert.assertEquals; 

    public class Login2 { 
     public static AppiumDriver<WebElement> driver; 

     @BeforeTest 
     public void before() throws MalformedURLException, InterruptedException{ 
       DesiredCapabilities capabilities = new DesiredCapabilities(); 
       capabilities.setCapability("deviceName", "192.168.150.101:5555"); 
       capabilities.setCapability(CapabilityType.BROWSER_NAME, "Android"); 
       capabilities.setCapability(CapabilityType.VERSION, "5.1.0"); 
       capabilities.setCapability("platformName", "Android"); 
       capabilities.setCapability("appPackage", "myApps"); 
       capabilities.setCapability("appActivity", "myApps"); 
       driver = new AndroidDriver<WebElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); 
       driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS); 
       Set<String> availableContexts = driver.getContextHandles(); 
       System.out.println("Total No of Context Found After we reach to WebView = "+ availableContexts.size()); 
       for(String context : availableContexts) { 
        if(context.contains("WEBVIEW")){ 
         System.out.println("Context Name is " + context); 
         // 4.3 Call context() method with the id of the context you want to access and change it to WEBVIEW_1 
         //(This puts Appium session into a mode where all commands are interpreted as being intended for automating the web view) 
         driver.context(context); 
         break; 
          } 
         } 
     } 

     @Test 
     public void login() throws InterruptedException{ 
      //Thread.sleep(6000); 
      WebElement log = driver.findElement(By.cssSelector("div[ng-click^='logReg']")); 
      log.click(); 
      driver.context("NATIVE_APP"); 
     } 

     @AfterTest 
     public void after(){ 
      driver.quit(); 
     } 

    } 

<div class="background-menu col box-menu loginIcon" ng-click="logReg()"> 
     <img class="menu_icon3" src="img/MenuIcon/blank.png" alt="login"> 
    </div> 

어떤 도움 주셔서 너무 감사 클릭 할 내가 선택한려고 요소입니다.

답변

0

Appium 콘솔에서 출력을 게시 할 수 있습니까? 아마도 귀하의 앱은 setWebContentsDebuggingEnabledfalse으로 설정되어있을 것입니다. 앱에이 기능이 설정되어 있는지 확인하십시오. 그렇지 않으면 WebView 컨텍스트가 생기지 않습니다.

+0

어쨌든 webview로 전환하는 다른 방법을 발견했습니다.이 답변을 알고 계시나요? [링크] (http://stackoverflow.com/questions/38452767/cannot-start-a-selendroid-session-because-the-server-apk-does-not-exist) 정말 고마워. 앱이 true 또는 false로 설정했는지 어떻게 확인할 수 있습니까? 내가 그것을 만들지 않았기 때문에, 나는 단지 그것을 시험하고있다. 고맙습니다. – Jonathan

+0

Appium Inspector에서 확인할 수 있습니다. 선택한 요소의 속성 아래에 "컨텍스트"메뉴가 있습니다 (스크린 샷 확인 - http://imgur.com/a/RoFZy). 'WebView'가 있으면, 귀하의 앱은 WebView 디버깅을 가능하게합니다. 그렇지 않으면 개발자에게 앱에 앱을 포함 해달라고 요청해야합니다. –

+0

Windows 용 Appium을 사용하고 있으며 관리자가 컨텍스트가 없습니다. 어쨌든 Windows 용 Appium에서 보거나 Mac을 사용해야합니까? 고맙습니다. – Jonathan

관련 문제