等待元素。取决于是否出现不同的效果。硒Python

时间:2019-03-12 11:38:31

标签: python selenium selenium-webdriver

我有一个问题,因为页面上有一个元素随机出现。如果出现,我要等到隐藏为止。如果没有出现,我想转到下一个测试步骤(下一行代码,下一个函数)。我该怎么做?

我的代码:

def elementwait(self):
    WebDriverWait(self.driver, 15).until(
        expected_conditions.element_to_be_clickable(myPathtoElement)
    )
    loader = self.driver.find_element(*myPathtoElement)
    WebDriverWait(self.driver, 15).until(
        expected_conditions.invisibility_of_element_located(myPathtoElement)
    )

2 个答案:

答案 0 :(得分:0)

您可以像这样使用Try。

def elementwait(self):
 if len(WebDriverWait(self.driver, 15).until(expected_conditions.presence_of_all_elements_located((By.XPATH,"myPathtoElement"))))>0 :
    driver.find_element_by_xpath("myPathtoElement").click()

 else:
    loader = self.driver.find_element(*myPathtoElement)
    WebDriverWait(self.driver, 15).until(
        expected_conditions.invisibility_of_element_located(myPathtoElement)
    )

答案 1 :(得分:-1)

您将要等到元素出现,然后,如果成功,请等到元素消失。如果未成功,则需要捕获超时异常,然后继续。为此,您需要将等待时间包装在try-catch中,这样,如果该元素从不出现,则捕获超时异常,并且可以继续执行。

def element_wait(self):
    try:
        wait = WebDriverWait(self.driver, 15)
        wait.until(expected_conditions.visibility_of_element_located(myPathtoElement))
        wait.until(expected_conditions.invisibility_of_element_located(myPathtoElement))
    except TimeoutException:
        // nothing to do here since the element did not appear
    // continue execution here

一些注意事项:

  1. 我将方法的名称更改为element_wait(),因为它更像是python-y。您可能想要一个更具描述性的方法名称,但我想不出一个名称不是很长的方法... wait_for_element_to_appear_and_disappear()或更具体的名称,例如handle_loader()等,请参见python naming conventions有关更多信息。您可能希望将变量名也更改为更多python-y,例如myPathtoElement
  2. 我将等待存储在变量中,因为您最终两次使用它。
  3. 由于您实际上没有单击元素,因此我将等待的等待时间从“等待可点击”更改为“等待可见”。
  4. 您从未使用过loader,所以我不确定它是否应该放在第一位,所以我将其删除。