折腾:
【未解决】iOS自动化处理WiFi代理:WiFi详情页中更新代理配置信息
期间,界面中:

在清除了旧的 服务器 和端口,分别输入了新的值后
去处理 鉴定
找到了鉴定 元素,但是获取值,竟然是 0:

不是希望的 实际的值 1
导致后续逻辑异常,没有去点击switch
那这个恶心的bug,真的是没法规避了。。。
不过注意到:
<XCUIElementTypeCell type="XCUIElementTypeCell" value="1" enabled="true" visible="true" x="0" y="359" width="414" height="46"> <XCUIElementTypeStaticText type="XCUIElementTypeStaticText" value="鉴定" name="鉴定" label="鉴定" enabled="true" visible="true" x="20" y="359" width="323" height="46"/> <XCUIElementTypeOther type="XCUIElementTypeOther" enabled="true" visible="true" x="20" y="404" width="394" height="1"/> <XCUIElementTypeSwitch type="XCUIElementTypeSwitch" value="1" name="鉴定" label="鉴定" enabled="true" visible="true" x="343" y="366" width="51" height="32"/> </XCUIElementTypeCell>
即,xml中源码的值,倒是准的,是1
-》可以考虑换用bs的find
-》虽然慢点,但是至少值是准的
curAuthValueStr = ""
# curAuthValue = authSwitchElement.value # '0'
# curAuthValueStr = str(curAuthValue)
# Special: sometime wda element value is WRONG, actual is '1', but got '0'
# so change to bs find then get value from page source xml
curPageXml = self.get_page_source()
soup = CommonUtils.xmlToSoup(curPageXml)
authSwitchChainList = [
{
"tag": "XCUIElementTypeTable",
"attrs": self.FullScreenAttrDict
},
{
"tag": "XCUIElementTypeCell",
"attrs": {"enabled":"true", "visible":"true", "x":"0", "width":"%s" % self.X}
},
{
"tag": "XCUIElementTypeSwitch",
"attrs": {"enabled":"true", "visible":"true", "name": "鉴定"}
},
]
authSwitchSoup = CommonUtils.bsChainFind(soup, authSwitchChainList)
if authSwitchSoup:
curAuthValue = authSwitchSoup.attrs.get("value", None)
if curAuthValue:
curAuthValueStr = str(curAuthValue)
if curAuthValueStr == "":
return False去调试

可以获取到正确的值 1
与之相对,element的value是错误的:0
【总结】
此处,页面上是:
但是,对于 鉴定,用wda的query找到了元素,其value值,是错误的:0
而不是实际上的值:1
最后改用获取xml源码,其中值是正确的1,再去bs的find找到元素,即可获取正确的值
"""
<XCUIElementTypeCell type="XCUIElementTypeCell" value="0" enabled="true" visible="true" x="0" y="359" width="414" height="46">
<XCUIElementTypeOther type="XCUIElementTypeOther" enabled="true" visible="true" x="0" y="404" width="414" height="1"/>
<XCUIElementTypeStaticText type="XCUIElementTypeStaticText" value="鉴定" name="鉴定" label="鉴定" enabled="true" visible="true" x="20" y="359" width="323" height="46"/>
<XCUIElementTypeSwitch type="XCUIElementTypeSwitch" value="0" name="鉴定" label="鉴定" enabled="true" visible="true" x="343" y="366" width="51" height="32"/>
</XCUIElementTypeCell>
"""
newAuthenticateValue = newManualProxyValue["authenticate"]
authSwitchQuery = {"type":"XCUIElementTypeSwitch", "name": "鉴定", "enabled": "true"}
authSwitchQuery["parent_class_chains"] = [ parentCellClassChain ]
foundAuth, respInfo = self.findElement(authSwitchQuery, timeout=0.1)
if not foundAuth:
return False
authSwitchElement = respInfo
curAuthValueStr = ""
# curAuthValue = authSwitchElement.value # '0'
# curAuthValueStr = str(curAuthValue)
# Special: sometime wda element value is WRONG, actual is '1', but got '0'
# so change to bs find then get value from page source xml
curPageXml = self.get_page_source()
soup = CommonUtils.xmlToSoup(curPageXml)
authSwitchChainList = [
{
"tag": "XCUIElementTypeTable",
"attrs": self.FullScreenAttrDict
},
{
"tag": "XCUIElementTypeCell",
"attrs": {"enabled":"true", "visible":"true", "x":"0", "width":"%s" % self.X}
},
{
"tag": "XCUIElementTypeSwitch",
"attrs": {"enabled":"true", "visible":"true", "name": "鉴定"}
},
]
authSwitchSoup = CommonUtils.bsChainFind(soup, authSwitchChainList)
if authSwitchSoup:
curAuthValue = authSwitchSoup.attrs.get("value", None)
if curAuthValue:
curAuthValueStr = str(curAuthValue)
if curAuthValueStr == "":
return False
if curAuthValueStr != newAuthenticateValue:
# click switch element to change value
isClickOk = self.clickElement(authSwitchElement)
if not isClickOk:
return False即可。
转载请注明:在路上 » 【已解决】facebook-wda获取鉴定的value值是错误的