使用getAttribute获取Native上下文中webelement的类名

时间:2016-04-07 13:46:54

标签: android-layout selenium appium nosuchelementexception

浏览getAttribute的java文档。无法理解上述提及的要点:

  

最后,以下通常错误大写的属性/属性   名称按预期评估:" class" "只读"

有人可以确认webElement.getAttribute("class")是否应该返回元素的类名吗?

修改:自己尝试

System.out.println("element " + webElement.getAttribute("class")); 

我正在

  

org.openqa.selenium.NoSuchElementException

注意:元素确实存在于屏幕上,因为我可以在元素上成功执行操作:

webElement.click(); //runs successfully

代码:

WebElement webElement = <findElement using some locator strategy>; 
System.out.println("element " + webElement.getAttribute("class"));

3 个答案:

答案 0 :(得分:1)

因此问题的答案在@SergeyTikhomirov的appium / java-client问题列表中的GitHub上得到了解答。对此的简单解决方案是访问className属性,如下所示:

webElement.getAttribute("className")); //instead of 'class' as mentioned in the doc

此处的方法核心实施AndroidElement

答案 1 :(得分:0)

根据this answer,是的,你做得对。您的org.openqa.selenium.NoSuchElementException被抛出,因为selenium无法找到元素本身。

您发布的关于webElement.click()实际工作的旁注很遗憾未包含在您发布的代码中。由于它不是实际问题的一部分,我在没有解决的情况下留下这个答案。

答案 2 :(得分:0)

public String getStringAttribute(final String attr)
  throws UiObjectNotFoundException, NoAttributeFoundException {
String res;
if (attr.equals("name")) {
  res = getContentDesc();
  if (res.equals("")) {
    res = getText();
  }
} else if (attr.equals("contentDescription")) {
  res = getContentDesc();
} else if (attr.equals("text")) {
  res = getText();
} else if (attr.equals("className")) {
  res = getClassName();
} else if (attr.equals("resourceId")) {
  res = getResourceId();
} else {
  throw new NoAttributeFoundException(attr);
}
return res;

}