我正在使用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
并点击新页面上的按钮,这不是我的想。
答案 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)