如何使用 WinAppDriver 定位 Modal window of Modal window 上的元素
How to use WinAppDriver to locate elements on Modal window of Modal window
我正在尝试使用最新的 WinAppDriver v1.2.1.WinAppDriver 在 windows 10 pro 上自动化 Windows 打印机驱动程序应用程序。
测试脚本无法在 Preferences Window 上找到任何元素,这是一个 Modal window 的 Modal Window。
测试场景如下:
- 测试脚本启动 notepad.exe,找到并单击打印菜单项,显示打印模式 window。
- 然后找到并单击“打印模式”window 上的“首选项”按钮,显示“首选项模式”window。
- 然后尝试点击首选项模式 Window 上的元素,但失败了。
这是我的示例代码,使用 Appium-Python-客户端库:
from appium import webdriver
desired_caps = {}
desired_caps["app"] = "C:\Windows\notepad.exe"
desired_caps["platformName"] = "windows"
driver = webdriver.Remote(
command_executor='http://127.0.0.1:4723',
desired_capabilities= desired_caps)
driver.find_element_by_name("ファイル(F)").click()
driver.find_element_by_accessibility_id("6").click()
# click elements on the Print modal window
driver.find_element_by_accessibility_id("1010").click()
# click elements on the Preferences modal window
driver.find_element_by_xpath("/Pane[@ClassName=\"#32769\"][@Name=\"デスクトップ 1\"]/Window[@ClassName=\"#32770\"][@Name=\"印刷設定\"]/Tab[@ClassName=\"SysTabControl32\"]/TabItem[@Name=\" 拡張機能 \"]").click()
driver.find_element_by_xpath("/Pane[@ClassName=\"#32769\"][@Name=\"デスクトップ 1\"]/Window[@ClassName=\"#32770\"][@Name=\"印刷設定\"]/Button[@ClassName=\"Button\"][@Name=\"設定(E)...\"]").click()
driver.find_element_by_xpath("/Pane[@ClassName=\"#32769\"][@Name=\"デスクトップ 1\"]/Window[@ClassName=\"#32770\"][@Name=\"印刷設定\"]/Window[@ClassName=\"#32770\"][@Name=\"セキュリティ印刷設定\"]/CheckBox[@ClassName=\"Button\"][@Name=\"セキュリティ印刷(S)\"]").click()
WinAppDriver 的日志:
{"status":7,"value":{"error":"no such element","message":"An element could not be located on the page using the given search parameters."}}
- 我也尝试过相对 xpath 表达式,并通过名称或可访问性 ID 进行尝试。没有成功。
- 我也试过 WADLibrary client library。它有同样的现象。
- 我也试过一些其他版本的WinAppDriver,除了老版本的WinAppDriver v1.1.4
,都失败了
是否有任何其他方法可以在后代模态 window、首选项模态 window 上定位元素?
第二个模态 window(首选项模态 window )实际上被视为新的 window(其 window 句柄由 winappdriver 管理)。将会话切换到 window 并使用相对 xpath 后,我解决了问题。
我正在尝试使用最新的 WinAppDriver v1.2.1.WinAppDriver 在 windows 10 pro 上自动化 Windows 打印机驱动程序应用程序。 测试脚本无法在 Preferences Window 上找到任何元素,这是一个 Modal window 的 Modal Window。 测试场景如下:
- 测试脚本启动 notepad.exe,找到并单击打印菜单项,显示打印模式 window。
- 然后找到并单击“打印模式”window 上的“首选项”按钮,显示“首选项模式”window。
- 然后尝试点击首选项模式 Window 上的元素,但失败了。
这是我的示例代码,使用 Appium-Python-客户端库:
from appium import webdriver
desired_caps = {}
desired_caps["app"] = "C:\Windows\notepad.exe"
desired_caps["platformName"] = "windows"
driver = webdriver.Remote(
command_executor='http://127.0.0.1:4723',
desired_capabilities= desired_caps)
driver.find_element_by_name("ファイル(F)").click()
driver.find_element_by_accessibility_id("6").click()
# click elements on the Print modal window
driver.find_element_by_accessibility_id("1010").click()
# click elements on the Preferences modal window
driver.find_element_by_xpath("/Pane[@ClassName=\"#32769\"][@Name=\"デスクトップ 1\"]/Window[@ClassName=\"#32770\"][@Name=\"印刷設定\"]/Tab[@ClassName=\"SysTabControl32\"]/TabItem[@Name=\" 拡張機能 \"]").click()
driver.find_element_by_xpath("/Pane[@ClassName=\"#32769\"][@Name=\"デスクトップ 1\"]/Window[@ClassName=\"#32770\"][@Name=\"印刷設定\"]/Button[@ClassName=\"Button\"][@Name=\"設定(E)...\"]").click()
driver.find_element_by_xpath("/Pane[@ClassName=\"#32769\"][@Name=\"デスクトップ 1\"]/Window[@ClassName=\"#32770\"][@Name=\"印刷設定\"]/Window[@ClassName=\"#32770\"][@Name=\"セキュリティ印刷設定\"]/CheckBox[@ClassName=\"Button\"][@Name=\"セキュリティ印刷(S)\"]").click()
WinAppDriver 的日志:
{"status":7,"value":{"error":"no such element","message":"An element could not be located on the page using the given search parameters."}}
- 我也尝试过相对 xpath 表达式,并通过名称或可访问性 ID 进行尝试。没有成功。
- 我也试过 WADLibrary client library。它有同样的现象。
- 我也试过一些其他版本的WinAppDriver,除了老版本的WinAppDriver v1.1.4 ,都失败了
是否有任何其他方法可以在后代模态 window、首选项模态 window 上定位元素?
第二个模态 window(首选项模态 window )实际上被视为新的 window(其 window 句柄由 winappdriver 管理)。将会话切换到 window 并使用相对 xpath 后,我解决了问题。