我想问一下如何解决测试中的时间延迟。我现在有一个像这样的脚本:
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)我找到了错误的解决方案。有想法吗?
答案 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")