如何在硒python测试中设置等待条件

时间:2019-06-21 07:18:02

标签: python selenium selenium-webdriver webdriverwait

我想问一下如何解决测试中的时间延迟。我现在有一个像这样的脚本:

WebDriverWait (self.browser, 20) .until (EC.element_to_be_clickable ((By.ID, "Login1_LoginButton"))).
sleep (5) \ t
self.assertEqual ("Page 1 | Hotline", self.browser.title)
print ("Login OK")

登录后检查页面名称时,这是对应用程序的登录。由于Internet的速度,它并非总是最佳状态,有时测试会失败。最好在这里放置一个条件,以等待应用程序登录然后检查。也给那里睡觉(5)我找到了错误的解决方案。有想法吗?

3 个答案:

答案 0 :(得分:2)

Tomasito,

成功登录后,您必须弄清楚哪个元素最后出现,然后编写该元素的定位符并传递Web驱动程序命令。 WebDriverwait 是为此的最佳解决方案:

点击登录按钮后,您可以声明页面名称,如下所示:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    switch indexPath.row {
    case 0: return 230
    case 1: return 200
    case 2: return 120
    default: fatalError("Unexpected row number \(indexPath.row)")
    }
}

请注意,这种情况的极端情况是wait = WebDriverWait(self.browser, 10) element = wait.until(EC.visibility_of_element_located((By.ID, 'id of web page heading or any element that loads after'))) self.assertEqual ("Page 1 | Hotline", self.browser.title) print ("Login OK") ,它将条件设置为要等待的确切时间段。

您可以推荐官方link

答案 1 :(得分:0)

像下面这样设置您的等待条件,它对我有用。如果没有工作,请告诉我。并且不要与self.browser和self.assertEqual混淆,我没有使用self,因为,这对我有用,而无需创建类。如果要创建类和方法,则应声明自变量。对于我的程序,我刚刚创建了方法并运行并声明为全局变量。如下所示,

def setup():
     global driver
     driver = webdriver.Chrome(executable_path="")
     driver.maximize_window()

def execute():

    wait = WebDriverWait(browser, 10)
    element = wait.until(EC.visibility_of_element_located((By.ID, 'id of web 
    page heading or any element that loads after')))  

    assertEqual ("Page 1 | Hotline", self.browser.title)
    print ("Login OK")

答案 2 :(得分:0)

有关用例的更多信息将有助于我们构建更规范的答案。但是,您可以考虑以下方法:

  • 如果您的用例是要声明页面标题,则可以为<body>标记内的任何元素引入 WebDriverWait ,例如页面标题,因为这意味着时间页面标题,即始终是<title>标签一部分的<head>标签必须早于其中的元素进行渲染<body>标签,您可以使用以下解决方案:

    WebDriverWait (self.browser, 20) .until (EC.visibility_of_element_located ((By.CSS_SELECTOR, "css_page_header")))
    self.assertEqual ("Page 1 | Hotline", self.browser.title)
    print ("Login OK")
    
  • 您还可以为页面标题引入 WebDriverWait 来包含特定文本,例如热线,然后声明完整的页面标题,如下所示:

    WebDriverWait (self.browser, 20) .until (title_contains("Hotline"))
    self.assertEqual ("Page 1 | Hotline", self.browser.title)
    print ("Login OK")