python selenium:如何在同一页面上多次访问网页

时间:2017-06-22 01:26:41

标签: python selenium testing

我正在使用selenium和python来测试我的Web服务器。这是我的测试代码:

i = 0
msg = 'abc'
while i < 10:
    driver = webdriver.Chrome()
    driver.get("http://www.example.com")
    txt = driver.find_element_by_id('input-text')
    txt.clear()
    txt.send_keys(msg)
    btn = driver.find_element_by_id('input-search')
    btn.click()
    driver.quit()
    i += 1

代码运行良好,只有一件事:它执行Chrome,进行测试并在每次循环时关闭它。显然没有必要。我只需要执行一次Chrome并执行许多请求。我尝试过如下,但它不起作用:

i = 0
msg = 'abc'
driver = webdriver.Chrome()
while i < 10:
    driver.get("http://www.example.com")
    txt = driver.find_element_by_id('input-text')
    txt.clear()
    txt.send_keys(msg)
    btn = driver.find_element_by_id('input-search')
    btn.click()
    i += 1
driver.quit()

我认为这是因为在我的测试中,有两件事: 1)在输入文本中填写abc;
2)单击按钮,提交abc并打开新网页。

在新页面上,还有一个input-text和一个按钮input-search,因此它将填充abc并点击新页面上的按钮,这不是我的想。

1 个答案:

答案 0 :(得分:0)

btn.click(),它不会等待加载页面,因为它不是超链接,也不会提交网络表单。所以你的脚本可能会失败。您应该通过等待某些元素来确定它是否应该重新加载页面来修复它。请参阅下面的代码。

try:
    driver.get('http://www.example.com')
    txt = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "input-text")))
    txt.clear()
    txt.send_keys(msg)
    btn = driver.find_element_by_id('input-search')
    btn.click() 
    countryDescriptionElement = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "country-description")))
    #print(driver.page_source.encode('utf-8')) 
except WebDriverException as ex:
    print("Enter: " + msg + ", Error: " + str(ex) + ", Found: " + driver.page_source)
相关问题