是否有命令执行未包含在框架内的selenium测试?

时间:2017-06-13 00:07:13

标签: selenium selenium-webdriver selenium-chromedriver

是否有命令在不使用框架的情况下运行selenium测试?例如pytest foo_test.py

为了运行以下测试,我的本地计算机需要什么?我很困惑,因为这似乎唯一的要求是chromedriver但我不知道使用哪个命令来执行实际的测试。

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

capa = DesiredCapabilities.CHROME
capa["pageLoadStrategy"] = "none"

driver = webdriver.Chrome(desired_capabilities=capa)
wait = WebDriverWait(driver, 20)

driver.get('http://stackoverflow.com/')

wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#h-top-questions')))

driver.execute_script("window.stop();")

2 个答案:

答案 0 :(得分:1)

您正在使用实际的2个要求。硒本身是一个要求,然后是你提到的chromedriver。该文件只是一个python文件,因此您可以通过执行python foo_test.py来运行它。还可以选择使用Unittest之类的框架,这对于查看测试结果非常有用。

Selenium本身不是“测试框架”,它是一个允许用户与Web浏览器交互的命令库。 Selenium可用于网页编制或自动化任务以及测试目的。

答案 1 :(得分:1)

以下是您的问题的答案:

正如您提到的Is there a command to run selenium tests without using a framework,答案是 Yes

简单地说,在python中存在某些框架,如pytestunittest等,用于构建测试执行和解释测试结果。每个框架都有自己的优势。当代码库变得庞大时,框架有助于我们安排。但使用框架不是强制性的。

关于您的代码,我发现代码中没有任何重大错误,但使用Selenium 3.x.x时,您需要从here下载chromedriver并将其保存在您的计算机中。在初始化WebDriver实例时,您需要提及chromedriver的绝对路径,如下所示。

以下是您自己的代码,其中包含一些简单的调整,这些调整在我的最后很有用:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
capa = DesiredCapabilities.CHROME
capa["pageLoadStrategy"] = "none"
driver = webdriver.Chrome(desired_capabilities=capa,executable_path="C:\\your_directory\\chromedriver.exe")
wait = WebDriverWait(driver, 20)
driver.get('http://stackoverflow.com/')
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#h-top-questions')))
driver.execute_script("window.stop();")

如果这回答你的问题,请告诉我。