给定一个UI元素引用,我如何向其“附加”一个字符串,以便找到它的下一个XCUIElementTypeStaticText
类型的同级元素?
我使用的框架包含一个driver_helper.py
文件。
该文件中的find_element
和find_elements
方法定义如下:
def find_element(self, locator: tuple) -> WebElement:
return self.driver.find_element(*locator)
def find_elements(self, locator: tuple) -> list[WebElement]:
return self.driver.find_elements(*locator)
还有一个selector_const.py
文件,其中包含各种类型选择器的声明。我专门用来回答这个问题的是:BY_XPATH = MobileBy.XPATH
在我正在处理的屏幕/页面对象文件中,我定义了一个元组self.CHECKBOXES = (sc.BY_XPATH, '//XCUIElementTypeButton[@name="Square"]')
然后我使用它来创建这个变量:checkboxes = self.driver_helper.find_elements(self.CHECKBOXES)
我希望找到其中一个复选框的兄弟元素,但下面这段代码:
checkboxes = self.driver_helper.find_elements(self.CHECKBOXES)
sibling = (
sc.BY_XPATH,
f'{checkboxes[0]}/following-sibling::XCUIElementTypeStaticText',
)
test = self.driver_helper.find_element(sibling)
print("checkbox 0 sibling element text: " + str(test))
失败并显示NoSuchElementError: An element could not be located on the page using the given search parameters.
我已包含屏幕的域的屏幕截图,以显示复选框确实存在,并且旁边有一个XCUIElementTypeStaticText
IOS应用程序屏幕的域名:
<XCUIElementTypeButton type="XCUIElementTypeButton" name="Square" label="Square" enabled="true" visible="true" accessible="true" x="15" y="428" width="20" height="21" index="22"/>
<XCUIElementTypeStaticText type="XCUIElementTypeStaticText" value="checkbox 1 text" name="checkbox 1 text" label="checkbox 1 text" enabled="true" visible="true" accessible="true" x="43" y="428" width="308" height="18" index="23"/>
<XCUIElementTypeButton type="XCUIElementTypeButton" name="Square" label="Square" enabled="true" visible="true" accessible="true" x="15" y="478" width="20" height="21" index="24"/>
<XCUIElementTypeStaticText type="XCUIElementTypeStaticText" value="checkbox 2 text" name="checkbox 2 text" label="checkbox 2 text" enabled="true" visible="true" accessible="true" x="43" y="478" width="260" height="35" index="25"/>
<XCUIElementTypeButton type="XCUIElementTypeButton" name="Square" label="Square" enabled="true" visible="true" accessible="true" x="15" y="542" width="20" height="21" index="26"/>
<XCUIElementTypeStaticText type="XCUIElementTypeStaticText" value="checkbox 3 text" name="checkbox 3 text" label="checkbox 3 text" enabled="true" visible="true" accessible="true" x="43" y="542" width="333" height="86" index="27"/>
<XCUIElementTypeButton type="XCUIElementTypeButton" name="Square" label="Square" enabled="true" visible="true" accessible="true" x="15" y="657" width="20" height="21" index="28"/>
<XCUIElementTypeStaticText type="XCUIElementTypeStaticText" value="checkbox 4 text" name="checkbox 4 text" label="checkbox 4 text" enabled="true" visible="true" accessible="true" x="43" y="657" width="320" height="52" index="29"/>
3条答案
按热度按时间tcomlyy61#
如果您可以在
driver_helper.py
中添加方法,则可以使用此answer中提供的解决方案在那里实现方法但如果您无法做到这一点,则需要更改
sibling
变量的代码。现在,您正在尝试将一个元素放入XPath中,但当您将对象放入字符串中时,这是不起作用的。因此,解决方法是将您用来查找父元素的XPath字符串放在那里。
当您将所有复选框放入一个列表中时,您可以遍历它们并获得兄弟项,如下所示:
wgxvkvu92#
将所有XPath存储在一个变量中:
3ks5zfa03#
您不能在XPath字符串中插入
WebElement
对象/引用,因为XPath表达式应该是字符串,正如您自己所说的。您可以做的是根据现有元素定位另一个元素。
例如,如果要根据现有元素查找
/following-sibling::td
,可以执行以下操作:1.在第二行中,我将
find_element
方法应用于element
对象,而不是driver
对象。1.XPath表达式以点
.
开头,以通知此相对XPath与当前节点相关。1.现在使用
find_element(By.XPATH,
,不推荐使用find_element_by_xpath
。更新
如果要查找元素列表的兄弟元素,可以执行以下操作: