当前位置: 首页 > 知识库问答 >
问题:

远程主机上的Selenium 2.0机器人类

和和煦
2023-03-14

我只是写了一个测试,应该通过webApp下载pdf文件(是的,我知道,我不应该在selenium上做,但是你知道,订单。)

我需要什么?

对于不同的场景,我必须下载不同的pdf,重命名并放置到自定义目录。所以,我必须处理系统模态窗口。一切都很好,所以测试是在远程主机上运行的,当我点击下载文件时,我处理系统模态窗口(我使用机器人包,它是扩展的机器人类,允许我们在远程主机上使用机器人类),所以我使用机器人类在系统模态上键入文件路径和文件名,然后单击“输入”确认并保存文件。这是我需要的一切,而且很有效,那么问题在哪里?这里:某人应该登录到远程主机,如果我通过rdp登录并看着屏幕(在我的主机上做我的事情),那么一切都很好,但是对于没有人登录的情况,看起来在测试期间webBrowswer没有一个专注,所以每次机器人类做一些动作,这个动作不是专注于webbroswer(因为它应该)。

测试等级:

@Test
public void compareDeposits() throws Exception {

    HomePage homePage = new HomePage(driver);
    PageFactory.initElements(driver, homePage);

    PrintDepositsPage printDepositsPage = (PrintDepositsPage) homePage.openViaUrl(Data.baseUrl).openViewViaTopMenu(
            ETopMenuItem.PrintDeposits);

    ((PrintDepositsPage) printDepositsPage).goToPrintedDepositsTab();
    printDepositsPage.getPrintedDepositsDateRangeFromInput().click();
    printDepositsPage.getPrintedDepositsDateRangeFromInput().clear();
    printDepositsPage.getPrintedDepositsGoButton().click();
    printDepositsPage.getFirstRecordOnPrintedDepositsTab().click();
    handler.getRobot().mouseClick(371, 274, InputEvent.BUTTON1_MASK);// get focus
    printDepositsPage.getPrintButtonEnabled().click();

    handler.downloadFile("DepositTest");

处理程序对象声明:

class SystemModalWindowHandler {

private RemoteWebDriver driver;
private Date date = new Date();
private DateFormat dateFormat = new SimpleDateFormat("yyy/mm/dd");
private String extendedTestName = dateFormat.format(date).replace("/", ".") + ".pdf";
private Robotil robotil = new Robotil("xxxxx", 6667);

public Robotil getRobot(){
    return robotil;
}

public void downloadFile(String testFileName) throws AWTException, InterruptedException {
    boolean continueBool = true;
    while (continueBool) {
        String pathToTestFile = new String("C:\\DiffPdfData\\" + testFileName + "\\"
                + extendedTestName);
        Thread.sleep(3000);
        for (int i = 0; i < pathToTestFile.length(); i++) {
            System.out.println(KeyStroke.getKeyStroke(pathToTestFile.charAt(i)) + " = "
                    + (int) pathToTestFile.charAt(i));
            if ((int) pathToTestFile.charAt(i) == 58) {

                robotil.pressKey(KeyEvent.VK_SHIFT);
                robotil.pressAndReleaseKey(KeyEvent.VK_SEMICOLON);
                robotil.releaseKey(KeyEvent.VK_SHIFT);
            }
            else {
                robotil.pressAndReleaseKey(KeyEvent.getExtendedKeyCodeForChar((int) pathToTestFile.charAt(i)));
            }
        }
        robotil.pressAndReleaseKey(KeyEvent.VK_ENTER);
        continueBool = false;
    }

当没有人登录时,有什么方法可以让大家关注webbrowser吗?。

共有1个答案

苏宏逸
2023-03-14

我相信,使用上述策略,您将无法在没有登录用户的情况下完成它。因此,我建议您使用更简单的解决方案。

您可以配置Firefox直接下载文件-文件类型和下载操作

如果不想硬编码浏览器的设置,则可以仅为测试设置特定的FF配置文件,您可以在其中配置要下载文件的位置。

FirefoxProfile firefoxProfile = new FirefoxProfile();

firefoxProfile.setPreference("browser.download.folderList",2);
firefoxProfile.setPreference("browser.download.manager.showWhenStarting",false);
firefoxProfile.setPreference("browser.download.dir","c:\\downloads");
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk","text/csv");
WebDriver driver = new FirefoxDriver(firefoxProfile);

Chrome驱动程序:

String downloadFilepath = "/path/to/download";
HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
chromePrefs.put("profile.default_content_settings.popups", 0);
chromePrefs.put("download.default_directory", downloadFilepath);
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("prefs", chromePrefs);
DesiredCapabilities cap = DesiredCapabilities.chrome();
cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
cap.setCapability(ChromeOptions.CAPABILITY, options);
WebDriver driver = new ChromeDriver(cap);
 类似资料:
  • 有没有可能让我的不和谐机器人发送消息,而不必在不和谐中键入命令?相反,我想从我的应用程序内部触发它。 上面的代码给出了一个属性错误:'NoneType'对象没有属性'send'

  • 机器A和B之间的通信工作良好。我可以运行像或这样的命令,它会给出预期的结果: 我听说过,但还没有尝试过,但据我所知,这并不能解决我的问题。 有什么方法可以直接使用来实现这一点。解决办法可能是使用连接到远程主机,并直接从远程主机使用客户机,但我希望尽可能避免这种解决方案。 在上运行,而不是在本地计算机上运行。

  • 问题内容: 我想知道这里是否有人知道如何将NAO机器人音频流传输到python中的远程模块,以及您是否有示例。我想直接在笔记本电脑上获取NAO音频缓冲区以进行处理,因此无需录制和scp或其他操作。 现在我的问题是这样的:aldebaran网站说,为了远程(在我的笔记本电脑上)接收音频,我必须编写一个继承自ALSoundExtractor的模块。事实是,此类未包含在python SDK中,因此,如果

  • 问题内容: 我正在尝试运行一个SSH到远程主机上的bash脚本,并停止正在运行的单个docker容器。 但是,出现以下错误: 当我手动执行此操作(向计算机SSH,运行命令)时,一切都很好,但是当尝试通过脚本执行操作时,我得到了错误。我猜我的命令替换语法不正确,我已经搜索并尝试了各种引号等,但无济于事。 谁能指出我要去哪里了? 问题答案: 在启动您的Heredoc时,请使用(或-仅引用第一个字符将具

  • 问题内容: 是否可以(直接使用命令或API)从远程主机启动容器? 假设我有两台具有不同体系结构的机器:-A是一台机器-B是一台机器 我想使用我的A机器在B机器上运行一个容器。起初,我认为可以使用以下命令: 但这个命令实际上拉图像,并试图在其中一些最终的机器运行它的原因很明显,你不能运行的图像所特有的一种机器。 机器A和B之间的通信正常。我可以运行诸如或的命令,它可以给我预期的结果: 我听说过并且还

  • 在Ansible Playbook中,我在运行start service模块时出现了一个错误,因为我想在远程主机上启动数据库。我对Ansible是新手。 致命:[10.138.12.67]:失败!=>{“changed”:false,“msg”:“找不到请求的服务mysql:host”}