我每秒打印一次在应用程序(android appium)中刷新的元素时遇到问题。
我有一个应用程序,它每秒生成一次文本,我需要将这些信息打印60秒钟。
我尝试过使用WebDriver,等等,我也尝试过time.sleep,甚至threading.Timer,但是那需要一个函数调用,而且由于我是初学者,所以我对pytest的嵌套函数有疑问
使用计时器:
def testSignal(i):
dbm = self.driver.find_element_by_id("com.ubnt.usurvey:id/vSignal")
print(dbm.text)
sys.stdout.write(str(i) + '\r')
sys.stdout.flush()
i += 1
threading.Timer(1, testSignal, [i]).start()
使用WebDriverWait:
wait = WebDriverWait(self.driver, 60, poll_frequency=1)
dbm = wait.until(EC.presence_of_element_located((By.ID,"com.ubnt.usurvey:id/vSignal")))
text = dbm.text
print(text)
使用time.sleep:
dbm = self.driver.find_element_by_id("com.ubnt.usurvey:id/vSignal")
text = dbm.text
print(text)
time.sleep(60)
这是我的新手,我在基于搜索元素(重新加载后)来循环打印时遇到问题。
答案 0 :(得分:0)
我不理解您的代码,但是我认为这可以。
dbm = self.driver.find_element_by_id("com.ubnt.usurvey:id/vSignal")
while True:
text = None
try:
text = dbm.text
except:
pass
if not text:
break
print(text)
time.sleep(1)
如果您想通过CTRL + C(KeyboardInterrupt)停止它并且不想停止或崩溃代码,则可以添加另一个try
:
dbm = self.driver.find_element_by_id("com.ubnt.usurvey:id/vSignal")
try:
while True:
text = None
try:
text = dbm.text
except:
pass
if not text:
break
print(text)
time.sleep(1)
except KeyboardInterrupt:
print("Loop stopped in a controlled manner.")