如何使用selenium网格使用MacOS作为集线器和WinOS作为节点进行文件上传?

时间:2013-04-03 04:06:39

标签: file-upload automation selenium-webdriver selenium-grid

我的代码如下,我正在使用Mac执行脚本并运行2个节点,1个在Windows上,1个在mac上。在Mac上上传工作完美,但Windows上传无法正常工作。

Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();    
StringSelection str = new StringSelection("C:\\Sheyan.pdf");   
clipboard.setContents(str, str);
if (systemType=="http://192.168.1.100:5555/wd/hub")    **(THIS IS THE WINDOWSOS NODE)**     
{       
    Robot robot = new Robot();      
    robot.keyPress(KeyEvent.VK_CONTROL);        
    robot.keyPress(KeyEvent.VK_V);        
    robot.keyRelease(KeyEvent.VK_V);        
    robot.keyRelease(KeyEvent.VK_CONTROL);        
    robot.keyPress(KeyEvent.VK_ENTER);        
    robot.keyRelease(KeyEvent.VK_ENTER);        
}   
else **(FOR MAC OS NODE)**
{       
    selenium.click(driver, UploadButton);       
    WebElement fileInput = driver.findElement(UploadButton);        
    fileInput.sendKeys("/Users/accesstesting/Documents/Sheyan.pdf");        
}

2 个答案:

答案 0 :(得分:2)

这永远不会起作用,Robot命令在运行脚本的机器上运行,它们不会传递给节点。使用您正在使用的机器人实现只有在本地计算机上运行测试时才会起作用。

如果要对远程节点运行测试,则要使用本地文件检测器:

driver.setFileDetector(new LocalFileDetector())

然后您只需使用普通的sendKeys()方法用本地文件填充上传输入,Selenium将在后台执行一些魔术,以便通过网格传递任何文件,以便正确上传它们。

答案 1 :(得分:0)

我知道这更像问题而不是答案,但仍然是:为什么在Windows节点上使用Robot,在Mac节点上使用Selenium?

如果你这样做会怎么样?

 if (systemType=="http://192.168.1.100:5555/wd/hub")    **(THIS IS THE WINDOWSOS NODE)** 
 {       
  selenium.click(driver, UploadButton);       
  WebElement fileInput = driver.findElement(UploadButton);        
  fileInput.sendKeys("C:\\Sheyan.pdf");        
}

因为如果在Windows节点上正确初始化了selenium和驱动程序,这应该可以正常工作