使用 getAttribute 获取本机上下文中网络元素的 class 名称
Using getAttribute to get the class name of a webelement in Native context
浏览了 getAttribute 的 java 文档。无法理解提到的观点:
Finally, the following commonly mis-capitalized attribute/property
names are evaluated as expected: "class" "readonly"
有人可以确认 webElement.getAttribute("class")
是否应该 return 元素的 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"));
根据 this answer,是的,你做对了。您的 org.openqa.selenium.NoSuchElementException
被抛出,因为 selenium 无法找到元素本身。
您发布的关于 webElement.click()
实际工作的旁注很遗憾没有包含在您发布的代码中。由于它不是实际问题的一部分,因此我不做任何处理就留下这个答案。
所以问题的答案在 appium/java-client 的问题列表中的 GitHub 上由 @SergeyTikhomirov 回答。对此的简单解决方案是访问类名 属性,如下所示:
webElement.getAttribute("className")); //instead of 'class' as mentioned in the doc
方法核心实现在这里:AndroidElement
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;
}
浏览了 getAttribute 的 java 文档。无法理解提到的观点:
Finally, the following commonly mis-capitalized attribute/property names are evaluated as expected: "class" "readonly"
有人可以确认 webElement.getAttribute("class")
是否应该 return 元素的 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"));
根据 this answer,是的,你做对了。您的 org.openqa.selenium.NoSuchElementException
被抛出,因为 selenium 无法找到元素本身。
您发布的关于 webElement.click()
实际工作的旁注很遗憾没有包含在您发布的代码中。由于它不是实际问题的一部分,因此我不做任何处理就留下这个答案。
所以问题的答案在 appium/java-client 的问题列表中的 GitHub 上由 @SergeyTikhomirov 回答。对此的简单解决方案是访问类名 属性,如下所示:
webElement.getAttribute("className")); //instead of 'class' as mentioned in the doc
方法核心实现在这里:AndroidElement
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;
}