2015-10-10 89 views
2

我面临以下问题: 我需要一个在一个范围内随机生成xpath并点击它,然后检查一个元素是否存在,如果是这样的午餐另一个功能。否则返回并重试。硒/ Python做东西n次

found = False 
     while not found: 
      rndm = random.choice(article_list) 
      random_link = driver.find_element_by_xpath("html/body/section/div[4]/div[1]/div/aside[%s]/a" % (rndm)) 
      random_link.click() 
      try: 
       driver.find_element_by_css_selector("element").is_displayed() 
       self.check() #function which check if the element is ok 
       found = True 
      except NoSuchElementException: 
       driver.back() 

它的工作,但它使用while循环。我需要限制它一定量的尝试?任何建议如何做到这一点?我试过了:

for _ in itertools.repeat(None, N): 

但是当N次尝试后没有找到元素时,测试不下降并断言为真。当它发现并通过self.check函数检查,一切都很好,我得到NoSuchElement错误。

回答

1

“我需要限制它一定量的尝试?”

由于现有的代码已经运行,您可以尝试添加新的逻辑,同时尽量保持现有代码不变。

found = False 
counter = 0 
max_tries = 10 
while not found and counter < max_tries: 
    counter += 1 
    ...... 
    try: 
     ...... 
     self.check() #function which check if the element is ok 
     found = True 
    except NoSuchElementException: 
     driver.back() 
+0

谢谢你的努力@ har07我发现了一个有点不同的解决方案:通过使用计数器变量,并检查除了检查found变量,像这样的计数器的一种可能方式。 – dzvert

+0

如果您找到了解决方案,请将其发布在此处作为答案并接受,以便将此问题标记为已回答。 – JeffC