序列化FirefoxDriver的最终目标(我的问题在这里)=使WebDriver更快!!
以下是描述如何序列化对象的链接.但它需要您从ISerializable实现您正在序列化的对象.我想要做的是序列化一个我没有定义的对象 - 一个基于第三方程序集(来自项目引用)中未实现ISerializable的类的对象.那可能吗?如何才能做到这一点?
http://www.switchonthecode.com/tutorials/csharp-tutorial-serialize-objects-to-a-file
属性(IWebDriver =接口类型):
private IWebDriver driver;
Run Code Online (Sandbox Code Playgroud)
对象实例(FireFoxDriver是类类型):
driver = new FirefoxDriver(firefoxProfile);
Run Code Online (Sandbox Code Playgroud)
================
为什么会抛出错误?它不喜欢这一行:
serializedObject.DriverInstance = (FirefoxDriver)driver;
Run Code Online (Sandbox Code Playgroud)
...
错误:
Cannot implicitly convert type 'OpenQA.Selenium.IWebDriver' to 'OpenQA.Selenium.Firefox.FirefoxDriver'. An explicit conversion exists (are you missing a cast?)
Run Code Online (Sandbox Code Playgroud)
这是代码:
FirefoxDriverSerialized serializedObject = new FirefoxDriverSerialized();
Serializer serializer = new Serializer();
serializedObject = serializer.DeSerializeObject(@"C:\firefoxDriver.qa");
driver = serializedObject.DriverInstance;
if (driver == null)
{
driver = new FirefoxDriver(firefoxProfile);
serializedObject.DriverInstance = (FirefoxDriverSerialized)driver;
serializer.SerializeObject(@"C:\firefoxDriver.qa", serializedObject);
}
Run Code Online (Sandbox Code Playgroud)
这是我构建的两个Serializer类:
public class Serializer
{
public Serializer() …
Run Code Online (Sandbox Code Playgroud) 我正在尝试获取在SauceLabs云上运行的测试的会话ID,但我似乎无法访问它.
我尝试了以下方法:
//Returns null
var sessionId = (string)((RemoteWebDriver)driver).Capabilities.GetCapability("webdriver.remote.sessionid");
//Will not compile
sessionId = ((RemoteWebDriver)driver).SessionId; //This is protected.
Run Code Online (Sandbox Code Playgroud)
第二种方法特别令人困惑.它是一个受保护的属性,但如果我只能从派生类访问它,那么它对我所需要的东西基本没用.
任何帮助表示赞赏.
为了使其工作,我必须创建一个派生自的类RemoteWebDriver
,然后定义一个getter方法.例如:
class CustomeRemoteDriver : RemoteWebDriver
{
public CustomeRemoteDriver(ICapabilities desiredCapabilities):base(desiredCapabilities)
{
}
public CustomeRemoteDriver(ICommandExecutor commandExecutor, ICapabilities desiredCapabilities):base(commandExecutor, desiredCapabilities)
{
}
public CustomeRemoteDriver(Uri remoteAddress, ICapabilities desiredCapabilities):base(remoteAddress, desiredCapabilities)
{
}
public CustomeRemoteDriver(Uri remoteAddress, ICapabilities desiredCapabilities, TimeSpan commandTimeout):base(remoteAddress, desiredCapabilities, commandTimeout)
{
}
public string GetSessionId()
{
return base.SessionId.ToString();
}
}
Run Code Online (Sandbox Code Playgroud) 我想使用BrowserStack之类的browserfarms来运行UI测试.我们目前正在使用BS通过JsTestDriver运行单元测试.因此,启动服务器,让browserfarm创建的一堆浏览器连接到jstd服务器,然后执行测试.
不幸的是,我无法找到一种方法来编写与jstd一起使用的UI测试(单击某个按钮,键入内容等).
Selenium RC是一个旨在进行UI测试的框架,但它强制使用自己的浏览器实例:Selenium通过作为框架一部分的驱动程序启动自己的浏览器.
我想要的是将JsTestDriver概念与Selenium的UI测试相结合:使用Selenium编写测试,在本地主机上启动Selenium RC服务器,让一堆浏览器连接到在browserfarm上启动的服务器,然后执行UI试验.
这甚至可能吗?有没有其他方法可以使用JSTD运行UI测试?Selenium RC是否无法捕获未使用webdriver启动的浏览器?
提前致谢.
是否可以将selenium连接到我正常使用的浏览器而不是驱动程序?对于正常浏览,我使用带有几个插件的chrome - 添加块加,flashblock等等.我想尝试使用此特定配置加载网站.我怎样才能做到这一点?
ps - 我不想只连接到这个问题中的开放浏览器:
如果我使用驱动程序生成进程,我不在乎.我只想要完整的浏览器配置 - cookies,插件,字体等.
谢谢
selenium ×2
.net ×1
assemblies ×1
c# ×1
javascript ×1
performance ×1
python ×1
python-2.7 ×1
saucelabs ×1
selenium-rc ×1
ui-testing ×1
unit-testing ×1
webdriver ×1