-1

我正在使用 Appium 和 Windows 应用程序驱动程序通过桌面会话自动化 Windows 应用程序。我想与之交互的某些元素没有唯一的可访问性 ID,但它们的类名和 ID 的组合似乎是唯一的。如何首先通过类名获取元素列表,然后获取其中一个具有特定 ID 的元素?

我知道提供的第二行代码不正确,我只是展示它来演示我需要什么行为。

以下是通过class名称:

class_elements = driver.find_elements_by_class_name("some_class_name")

下面是通过一个accessibilityid:

specific_element = class_elements.find_element_by_accessibility_id("some_id")
specific_element.click()

有没有办法把这两个放在一个循环中?

谢谢@Moshe Slavin 的建议

我尝试了以下代码

@pytest.mark.trial
def test_trial():
    className = "UIProperty"
    class_elements = ds.find_elements_by_class_name("UIProperty")

    for elm in class_elements:
        print(elm.get_attribute('id'))
        if elm.get_attribute('id') == "System.ItemNameDisplay":
            elm.click()

我决定也打印身份证。我得到以下结果:



...我很困惑为什么会这样。我正在使用 SDK 中的 Windows Inspect 工具来收集 UI 元素的属性,并且肯定存在与类名和 ID 匹配的元素。

4

2 回答 2

3

它应该看起来像:

class_elements = driver.find_elements_by_class_name("some_class_name")

for elm in class_elements:
    if elm.get_attribute('accesibilityID') == "some_id":
        elm.click()

编辑:

正如@Bill Hileman指出的那样,OP 正在寻找的属性accesibilityID不仅仅是id.

谢谢比尔

希望这对你有帮助!

于 2019-02-11T14:04:37.477 回答
2

Moshe Slavin 回答有效,但您也可以这样尝试。

假设您有一些类名,并且将其存储在一些变量中,如下所示:

className = "some class name"

然后您可以使用以下行获取所有匹配的类名,并且您知道:

 driver.find_elements_by_class_name(className)

与其查找所有元素并存储值,不如将要检查的可访问性 id 存储在一些变量中,如下所示:

accessibilityID = "some accessibility id"

然后,您可以使用以下 xpath 搜索包含类名和可访问性 id 的元素(仅用于指示目的,因此请使用标识必填字段的应用相关属性),而无需执行任何循环:

element = driver.find_element_by_xpath("//*[@class='"+className+"' and @accesibilityID='"+accessibilityID +"']");

我希望它也有效...

于 2019-02-11T14:16:41.037 回答