For*_*ing 3 java selenium webdriver selenium-webdriver
这就是我想要使用WebDriver执行的操作.
问题是当我关闭驱动程序并重新打开它时,我没有登录.
我的代码看起来像这样 -
WebDriver myD = null;
myD = new FirefoxDriver();
String URL = "https://www.eurostylelighting.com/protected/account/signin?ReturnUrl=%2f";
myD.navigate().to(URL);
myD.findElement(By.cssSelector("input#txtEmailorRewards")).sendKeys("abc@yahoo.com");
myD.findElement(By.cssSelector("input#txtPassword")).sendKeys("abc");
myD.findElement(By.xpath(".//*[@id='accountSignIn']/dl[4]/dd/label/span")).click();
Set<Cookie> cookies = myD.manage().getCookies();
myD.close();
myD= new FirefoxDriver();
myD.navigate().to(URL);
for(Cookie getCookie:cookies)
myD.manage().addCookie(getCookie);
Run Code Online (Sandbox Code Playgroud)
您可以创建firefox /其他浏览器配置文件并使用它.在这种情况下,所有cookie都将保存在此配置文件中.
您可以在浏览器打开后添加硬编码的cookie.但在这种情况下,它们将是"静态的".(在每个会话中都是一样的)
如果您只需要检查登录/注销,您可以手动将cookie保存到某些变量,从webdriver中删除cookie,刷新页面,添加cookie.
最简单的方法是使用序列化.(创建自己的cookie类并将其保存/加载到hdd)这是最好的选择!
您可以编写代码以在浏览器关闭之前将cookie保存到xml文件并在驱动程序启动时加载.这是使用Linq在C#中实现此类功能的示例:
.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Linq;
namespace Ifrit
{
public class CookiesManager
{
XDocument xmlDoc;
string xml_path;
public CookiesManager()
{
xml_path = ParamsLib.BrwsrOptions.BrowserCookiesFile;
xmlDoc = new XDocument();
if (File.Exists(xml_path))
{
xmlDoc = XDocument.Load(xml_path);
}
else
{
var xmlBodyNode = new XElement("body","");
var xmlCList = new XElement("cookies_list","");
xmlBodyNode.Add(xmlCList);
xmlBodyNode.Save(xml_path);
xmlDoc = XDocument.Load(xml_path);
}
}
public List<MyCookie> GetCookiesForUser(string user_name)
{
List<MyCookie> cookiesList = new List<MyCookie>();
try
{
cookiesList = (from e in xmlDoc.Root.Elements("cookies_list")
let cookie = e.Element("cookie")
where (string)cookie.Attribute("user_name") == user_name
select new MyCookie
{
name = (string)cookie.Attribute("c_name"),
value = (string)cookie.Attribute("c_value"),
domain = (string)cookie.Attribute("c_domain"),
path = (string)cookie.Attribute("c_path"),
expiries = (string)cookie.Attribute("c_expiries"),
secure = (string)cookie.Attribute("c_secure"),
}).ToList();
}
catch
{ }
return cookiesList;
}
public void AddCookiesForUser(string username, string cookieName, string cookieValue, string domainName, string path, string expiries, string secure)
{
var xmlNode = new XElement("cookie", new XAttribute("user_name", username),
new XAttribute("c_name", cookieName),
new XAttribute("c_value", cookieValue),
new XAttribute("c_domain", domainName),
new XAttribute("c_path", path),
new XAttribute("c_expiries", expiries),
new XAttribute("c_secure", secure)
);
xmlDoc.Element("body").Element("cookies_list").Add(xmlNode);
}
public void Save()
{
xmlDoc.Save(xml_path);
}
public void removeCookieForUser(string username)
{
try
{
xmlDoc.Element("body").Element("cookies_list").Descendants("cookie")
.Where(x => (string)x.Attribute("user_name") == username)
.Remove();
}
catch
{
}
}
public class MyCookie
{
public string name { get; set; }
public string value { get; set; }
public string domain { get; set; }
public string path { get; set; }
public string expiries { get; set; }
public string secure { get; set; }
}
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,可以用XML保存所有cookie,并通过附加的函数包装器从MyCookie加载到Cookie,并在需要时加载cookie.
顺便说一下这是cookies XML文件的例子:
<?xml version="1.0" encoding="utf-8"?>
<body>
<cookies_list>
<cookie user_name="SomeName" c_name="6a64d0796e530a04069945d05c4074ca" c_value="yes" c_domain="www.marathonsportsbook.com" c_path="/" c_expiries="17.05.2057 15:41:44" c_secure="True" />
<cookie user_name="SomeName" c_name="2b132c80be5271bcd9a0dddcc2f12c18" c_value="yes" c_domain="www.marathonsportsbook.com" c_path="/" c_expiries="17.05.2057 15:41:44" c_secure="True" />
<cookie user_name="SomeName" c_name="PUNTER_KEY" c_value="A81B639C8F69931DAAD24DE4A8972632" c_domain=".marathonsportsbook.com" c_path="/" c_expiries="27.05.2016 15:41:44" c_secure="True" />
<cookie user_name="SomeName" c_name="JSESSIONID" c_value="web2~F8D01B04BDE8C9702A1795521E06B218" c_domain="www.marathonsportsbook.com" c_path="/" c_expiries="28.05.2015 15:46:16" c_secure="True" />
<cookie user_name="SomeName" c_name="afterLoginRedirectPath" c_value=""https://www.marathonsportsbook.com/en/"" c_domain="www.marathonsportsbook.com" c_path="/" c_expiries="28.05.2015 15:46:16" c_secure="True" />
</cookies_list>
</body>
Run Code Online (Sandbox Code Playgroud)
user_name ="SomeName" - 是cookie配置文件名称
| 归档时间: |
|
| 查看次数: |
7717 次 |
| 最近记录: |