2015-03-02 55 views
0

我想使用c#和Appium在Android模擬器上自動執行移動網站測試。有一個簡單的測試場景我要自動的開始:
1.啓動瀏覽器
2.找到一個元素
3.清除它
4.發送鍵
無法在使用Appium和C#的Android模擬器的瀏覽器中找到元素#

我有一個問題第二步。每當MSTest嘗試在下面的代碼中執行FindElementById行時,都會收到錯誤: 「使用給定的搜索參數無法在頁面上找到元素。」

[TestClass] 
public class UnitTest1 
{ 
    private DesiredCapabilities _capabilities; 
    private AndroidDriver _driver; 

    public void InitializeDriver() 
    { 
     Console.WriteLine("Connecting to Appium server"); 
     _capabilities = new DesiredCapabilities(); 

     _capabilities.SetCapability("deviceName", "test_02"); 
     _capabilities.SetCapability(CapabilityType.BrowserName, "Chrome"); 
     _capabilities.SetCapability(CapabilityType.Version, "5.0.1"); 
     _capabilities.SetCapability(CapabilityType.Platform, "Android"); 

     //Application path and configurations 
     _driver = new AndroidDriver(new Uri("http://127.0.0.1:4723/wd/hub"), _capabilities); 
    } 

    [TestMethod] 
    public void TestMethod1() 
    { 
     InitializeDriver(); 

     var element = _driver.FindElementById("com.android.browser:id/url"); 
     element.Clear(); 
     element.SendKeys(@"http://stackoverflow.com/"); 
    } 
} 

從UIAutomator獲得的方法的輸入字符串,如下所示。

1

我試過了FindElementById輸入法幾種組合:
「com.android.browser:ID/URL」
「ID/URL」
「URL」
但沒有運氣。

我的環境:
的Windows 8.1
Appium 1.3.4.1
ChromeDriver 2.14.313457
Android設備監控24.0.2

回答

0

對不起,誤導! 在瀏覽器中測試網絡應用的情況下,元素應該像網頁上的常見元素一樣(不像android.widget.EditText和android.widget.Button等類)。因此,嘗試例如下面,你會看到一些結果:

var element = _driver 
      .findElementByXPath("//input[@id='lst-ib']"); 

爲了得到你應該運行桌面上的瀏覽器定位器,打開頁面,並使用一些工具/擴展類似Firebug在Firefox或Firebug的精簡版Chrome瀏覽器瀏覽器。

+0

謝謝,它工作! 你用什麼來查找定位符ID? 它是Chrome開發人員工具嗎? – Paul 2015-03-02 17:01:00

+0

你能推薦任何關於如何自動化網絡應用的教程嗎? Chrome中的 – Paul 2015-03-02 17:05:49

+0

我使用以下擴展名:** Firebug Lite **查找locators和** xPath Viewer **以測試我的xpath表達式。但是如果你使用Firefox,我會推薦使用Firebug,並且還有以下內容:FirePath,Firediff,Firefinder – Alex 2015-03-02 17:13:56

0

更新!以下方法不適用於Web測試:

您可以嘗試使用xpath查找元素嗎?

@FindBy(xpath="//android.widget.EditText[contains(@resource-id, 'url')]") 

所以你的情況,你可以嘗試以下方法:

var element = _driver.findElementByXPath("//android.widget.EditText[contains(@resource-id, 'url')]"); 

更新:在測試Web應用程序的情況下(不是本機),你應該使用網頁定位器,而不是Android的類。

+0

謝謝你的回答,但它不能解決問題。 你使用哪種語言?它是Java嗎?我的代碼是否正確,我的意思是說,你的語言和你的語言一樣嗎?我認爲也許中間庫有些問題,比如Appium或ChromeDriver。我認爲最好添加這些信息。 – Paul 2015-03-02 11:41:41

+0

我也試過FindByClass,它也沒有工作。 – Paul 2015-03-02 11:44:59

+0

我使用Java,但使用'findElementById'方法有同樣的問題,所以現在我只使用'findElementByXPath'。也請嘗試使用一些超時或「等待」方法 – Alex 2015-03-02 11:48:52

0

嘗試這些2個語句:

var element = _driver.FindElement(By.Id("com.android.browser:id/url"); 
driver.findElementsByXPath("//*[@class='com.android.browser' and @index='1']"); 
相關問題