Python:在一定时间内每秒打印一次元素的文本

时间:2019-07-19 17:35:30

标签: python python-3.x appium pytest

我每秒打印一次在应用程序(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)

这是我的新手,我在基于搜索元素(重新加载后)来循环打印时遇到问题。

1 个答案:

答案 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.")