我想使用c#和Appium在Android模拟器上自动化移动网站测试。有一个简单的测试场景我想在开始时自动化:
1.启动浏览器
2.找到一个元素
3.清除它
4.发送密钥
第二步我遇到了问题。每次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获得的方法的输入字符串如下所示。
我为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 :(得分:0)
更新!以下方法不适用于Web测试:
你能尝试使用xpath找到元素吗?
@FindBy(xpath="//android.widget.EditText[contains(@resource-id, 'url')]")
因此,在您的情况下,您可以尝试以下方法:
var element = _driver.findElementByXPath("//android.widget.EditText[contains(@resource-id, 'url')]");
更新:如果测试网络应用(非本机),您应该使用网页定位器而不是Android类。
答案 1 :(得分:0)
试试这两个陈述:
var element = _driver.FindElement(By.Id("com.android.browser:id/url");
driver.findElementsByXPath("//*[@class='com.android.browser' and @index='1']");
答案 2 :(得分:0)
很抱歉误导!!! 在浏览器中测试Web应用程序的情况下,元素应该像网页上的常用元素一样定位(而不是像android.widget.EditText和android.widget.Button这样的类)。因此,请尝试以下示例,您将看到一些结果:
var element = _driver
.findElementByXPath("//input[@id='lst-ib']");
要获取定位器,您应该在桌面上运行浏览器,打开页面并使用一些工具/扩展,例如Firefox中的Firebug或Chrome浏览器中的Firebug Lite。