在web上下文selenium中按类名和content-desc查找元素

时间:2016-06-16 08:20:40

标签: android selenium automation

我正在尝试使用selenium Java为Android设备中的移动应用编写测试用例。我必须在移动应用程序的Web视图中找到一个元素。我已经使用Appium检查窗口检查应用程序并获取元素详细信息如下。

指数:65

text:

class:android.widget.Button

content-desc:拍摄新照片

包:com.abc.xyz

资源ID:

checkable:false

选中:false

clickable:true

已启用:true

focusable:true

专注:假

scrollable:false

long-clickable:false

是密码:false

选中:false

我有使用util方法将窗口从原生视图切换到我们查看。

public class Context {
	public void switchContextToWebView(AppiumDriver<WebElement> driver)
			throws InterruptedException {
		Thread.sleep(Constants.DEFAULT_TIMEOUT);
		Set<String> contextNames = driver.getContextHandles();
		for (String contextName : contextNames) {
			if (contextName.contains("WEBVIEW")) {
				driver.context(contextName);
			}
		}

	}

	public void switchContextToNativeView(AppiumDriver<WebElement> driver)
			throws InterruptedException {
		Thread.sleep(Constants.DEFAULT_TIMEOUT);
		Set<String> contextNames = driver.getContextHandles();
		for (String contextName : contextNames) {
			if (contextName.contains("NATIVE")) {
				driver.context(contextName);
			}
		}

	}
}

在我的测试类中,我尝试使用下面的代码找到这个元素。

Context context = new Context();
		context.switchContextToWebView(driver);
		//WebElement pickCameraOption = driver.findElement(By.className("android.widget.Button"));
		WebElement elem = driver.findElementByXPath("//android.widget.Button[@content-desc='Take New Photo']");
		//WebElement elem = driver.findElementByXPath("//*[@class='android.widget.Button'and @content-desc='Take New Photo']");
		wait.until(ExpectedConditions.visibilityOf(elem));
		
		elem.click();

你可以观察到我已经尝试了两种方法来完成这项工作。但是他们不适合我。

任何人都可以帮我弄清楚这个硒发现者的确切问题吗?

1 个答案:

答案 0 :(得分:0)

我知道这是一个非常晚的答案。但它可以帮助那些面临同样问题的人

  1. 如果您要从原生视图切换到webview,并且您正在使用本机定位器。

  2. 如果您的上下文是native,则使用定位器作为xpath = // className [@ attribute ='attributeValue']。如果您尝试查找网页,最好使用webview定位器。

  3. 要从本机视图切换到webview,您必须使用Web定位器。 将您尝试自动化的调试应用程序连接到Chrome浏览器,然后输入以下URL chrome:// inspect#devices然后检查。你将获得HTML元素。从这里你将获得所有定位器。