我有个 loading 的界面,我想等待这个界面消失,然后再去做动作。
loading 的界面元素是能捕获到的,但是不知道如何写方法去等待消失,我使用 Python 语言,求助各位
给个参考思路:
做一个 for 循环,每隔一定的时间间隔就去找元素。如果抛异常(找不到)就跳出循环继续执行。
你甚至可以把找元素的操作抽取成一个参数,函数只负责在限时内一直运行直到超时或者产生指定异常。
具体源码可以参考 selenium2Library 的 wait_until_element_is_not_visible
方法:https://github.com/robotframework/Selenium2Library/blob/master/src/Selenium2Library/keywords/_waiting.py#L130
#1 楼 @chenhengjie123 非常感谢!
你还不如换个思路, 等待要操作的元素出现也行. 这样就是标准的 WebDriverWait 了. 这个东西跟 @chenhengjie123 提的思路是一样的.
#3 楼 @seveniruby 等待元素出现有 2 个问题,1 个是不能通用,2 是很多情况是元素出现了,在后面但是因为 loading 是灰掉的。
#4 楼 @luoxi001713 那只能用 @chenhengjie123 的办法了. 目前没有太好的方式判断元素前面是否有遮挡.
1 搂方法不错
这个界面消失之后应该有新的控件 用智能等待如何?
这个在 rf 的 appiumlib 中挺常用的,wait until page does not contian,可以参考下它的做法😄
已经实现, 非常感谢。跟大家分享一下代码
def wait_loading(self, timeout):
self.driver.implicitly_wait(1)
total_time = 0
while total_time < timeout:
try:
time.sleep(1)
self.View_Loading()
total_time += 1
except:
break
self.driver.implicitly_wait(10)
# 正在加载
@property
def View_Loading(self):
if self.app_os == self.ANDROID:
return self.driver.find_element_by_id("loading")
elif self.app_os == self.IOS:
return self.driver.find_element_by_accessibility_id("loading")
#9 楼 @luoxi001713 下面那个 def 干嘛的