使用Selenium

时间:2019-08-21 12:25:02

标签: java selenium selenium-webdriver caching automation

在我们重新启动服务器之后,我试图在网站上创建一种自动执行小旅程的自动化方法,以便在实际客户进入之前将其加载到Cache中。我已经实现了它的代码,但是它实现了什么所做的只是命中一个服务器/节点并获得该服务器上的缓存。我想要的是它应该一个接一个地击中4个节点中的每一个。

我已经提出了一个想法,我认为我们可以使用Cookie来做到这一点。所以

  1. 运行程序并从cookie中获取sessionID。
  2. 该sessionID包含节点号。
  3. 检查节点并循环执行相同的程序以击中另外3个节点。

节点示例:

  

354654-node-1,2,3,4

public static void main(String[] args) {
  try {
    System.setProperty("webdriver.chrome.driver", "C:\\Shashank\\Java\\Selenium\\chromedriver_win32\\chromedriver.exe");
    WebDriver driver = new ChromeDriver();
    driver.get("https://www.example.com/new");
    driver.manage().window().maximize();
    driver.findElement(By.id("consent_prompt_submit")).click();
    driver.findElement(By.id("postcode")).sendKeys("12345");
    driver.findElement(By.className("button-container")).click();

    String cookieValue = driver.manage().getCookieNamed("sessID").getValue();
    String cookiePath = driver.manage().getCookieNamed("sessID").getPath();
    Date expiryDate = driver.manage().getCookieNamed("sessID").getExpiry();
    boolean isSecure = driver.manage().getCookieNamed("sessID").isSecure();
    System.out.println("Cookie value for sessID : " + cookieValue);
    System.out.println("Cookie Path for sessID : " + cookiePath);
    System.out.println("Cookie Expiry for sessID : " + expiryDate);
    System.out.println("Cookie Secure for sessID : " + isSecure);

    // I need to write code here to invoke another session like above but it should hit another node

  } catch (Exception e) {
    e.printStackTrace();
  }
}

2 个答案:

答案 0 :(得分:0)

1)Chromedriver每次在您的%temp%中创建一个新的Chrome实例。这意味着,当您使用硒访问您的网站时,您并不是从客户通常用于访问您的网站的Chrome实例中访问它。

因此,完成您要完成的操作的最简单方法是将默认的chrome配置文件路径(客户使用的路径)指定为“ user-data-dir” chrome选项。这样,您将使用正确的Chrome配置文件访问您的网站。

2)关于多节点访问,您可以做的是在单独的Chrome标签中访问所有要访问的4/5 /任意节点。

  • 使用Actions类通过发送键“ Ctrl + T”打开新的标签页
  • 使用driver.getWindowHandles()获取选项卡列表
  • 使用driver.switchTo()。window(...)转到最后一个标签并访问另一个节点

如果您想访问不同会话中的那些节点,或者如果您不希望会话干扰,则可能需要终止并重新打开chrome实例。您一次只能在一个Chrome实例中使用user-data-dir。

如果将节点作为硒网格系统中的节点,则需要为不同的节点指定不同的chrome配置文件路径和不同的自动化代码。

希望这会有所帮助!

答案 1 :(得分:0)

如果没有会话,则应用程序将为您提供一个新会话,并且很可能会随机选择其他节点。因此,KISS方法将是多次运行脚本,并在每次新运行之前通过driver.manage().deleteAllCookies();清除cookie。

通过这种方式,您无需了解当前存在的节点数(可能会更改)。要结束脚本,您可以收集每次运行时看到的节点名称,如果在运行三次后没有新节点出现,则可以终止。