我不是OOP的大师,也许还有更深层次的东西我没有得到,但这里有很多困扰我的东西:
我没有看到WebDriver
的所有示例和教程都使用WebDriver driver = new FirefoxDriver();
driver.get("http://www.google.com/");
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
个对象的原因,例如:
WebDriver
在上面的示例中,我们需要添加更多代码,以便将TakesScreenshot
转换为FirefoxDriver
。为什么我们可以直接使用FirefoxDriver driver = new FirefoxDriver();
driver.get("http://www.google.com/");
File scrFile = driver.getScreenshotAs(OutputType.FILE);
对象:
WebDriver
所有驱动程序对象(GhostDriver除外)都实现了所有FirefoxDriver
方法+最终还有一些方法。所以,基本上我可以使用ChromeDriver
或WebDriver
任何地方需要WebDriver
个对象,因为它们间接实现了RemoteDriver
接口(所有驱动程序都继承自WebDriver
,它实现了WebDriver
接口),对吧?
那么,为什么不直接使用'真实'驱动程序,而不是将它们创建为WebDriver
,然后使用castings使代码复杂化等等?
如果最好使用FirefoxDriver
代替Sub test()
Dim ws as worksheet
Dim wsn as string
wsn = sheets("procedures").range("a1").value
Set ws = wsn
ws.activate
End sub
(例如),能否给我一些实际的例子?
答案 0 :(得分:1)
@CuriousGuy,这里有一个示例,您需要根据testNG套件上的配置(作为参数传递)实例化驱动程序对象,以便在不同的浏览器中测试UAT。 TestNG套件
<suite parallel="test" Thread-count=2>
<test>
<parameter name="browser" value="FF"/>
<classes>
<class name="package.MyClassname"/>
</classes>
</test>
<test>
<parameter name="browser" value="Chrome"/>
<classes>
<class name="package.MyClassname1"/>
</classes>
</test>
我们正在动态选择浏览器对象(OOP的多态概念)
class TestInit{
WebDriver driver;
@BeforeClass
@Parameters({"browser"})
public void intBowser(String browser){
switch(browser){
case "FF" :
driver = new FireforDriver();
break;
case "Chrome":
System.setProperty("webdriver.chrone.driver","path to your chromeDriver.exe");
driver = new ChromeDriver();
break;
default:
Logger.log("No available Driver");
}
driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.navigate().to("http://www.seleniumhq.org/");
}
@AfterClass
public void cleanup(){
driver.close();
driver.quit();
}
}
class Myclassname extends TestInit {
@Test
public void yourTestMethod(){
// Dynamically selected driver object will be available here.
}
}
希望,WebDriver不是废话,它在实际使用中很有意义。