【问题标题】:Upload of File Selenium UI Test not working for Dynamics 365 Portal上传文件 Selenium UI 测试不适用于 Dynamics 365 门户
【发布时间】:2019-09-04 13:44:52
【问题描述】:

我在 Dynamics 365 门户上运行的 Selenium UI 测试之一存在问题。测试很简单:

  1. 它登录到门户网站
  2. 导航到特定页面
  3. 使用SendKeys 从特定位置获取文件
  4. 点击上传按钮

当我运行此 UI 测试时,我收到一条消息,指出“请仅上传 csv 文件”。如果用户尝试上传不同的文件类型,这是正确的行为。但是,在这种情况下,文件扩展名是正确的,应该可以成功上传。如果我手动进入门户并自己上传相同的文件,它会正确上传。

有没有人在使用 D365 门户时遇到过类似的问题?或任何其他门户网站/网站?

下面是我点击上传按钮的代码。我用过By XPath、Id、LinkText等,一切正常。

public static void BulkUploadBrowse()
{
    try
    {
        //Click upload button
        var browse = Driver.Instance.FindElement(By.CssSelector("#AttachFile"));
        browse.Click();
        Thread.Sleep(1000);
    }
    catch (Exception ex)
    {
        throw (ex);               
    }
}

上传文件的逻辑如下:

public static void UploadFile()
{
    // Method 1 : File Upload Using Send Keys
    try
    {
        SendKeys.SendWait(@"C:\Users\Shea.Leonard\Desktop\Upload20190625161051.csv");
        Thread.Sleep(1500);

        SendKeys.SendWait(@"{ENTER}");
    }
    catch (Exception ex)
    {
        throw (ex);
    }
}

我还尝试了另一种使用 AutoITX3 库的方法:

//Method 2 : File Upload Using Auto IT || Leaving this here incase method 1 stops working.

AutoItX3 autoIt = new AutoItX3();
autoIt.WinActivate("Open");

autoIt.Send(@"F:\Users\adm_shea.leonard\Desktop\Upload20190625161051.csv");
Thread.Sleep(1000);
autoIt.Send("{ENTER}");

但是,我仍然遇到同样的错误。

基于此它应该成功上传文件。不确定这是否是 Selenium WebDriver 和 D365 Portal 插件的问题。我们收到的错误消息“请仅上传 csv 文件”是在 Dynamics 门户的 Web 表单配置中指定的。

同一个文件是有效的,因为如上所述,我已经能够通过门户手动成功上传它。

任何帮助将不胜感激。

【问题讨论】:

    标签: c# selenium selenium-webdriver selenium-chromedriver dynamics-365


    【解决方案1】:

    我会尝试的第一件事是将 .csv 扩展名从您的 SendKeys.SendWait(@"C:\Users\Shea.Leonard\Desktop\Upload20190625161051.csv"); 代码行中删除。

    所以就这样试试吧:

    SendKeys.SendWait(@"C:\Users\Shea.Leonard\Desktop\Upload20190625161051");

    这只是一个健全性测试,以确保 .csv 文件扩展名不会因任何原因而重复。

    我会尝试的另一件事是运行一些 Javascript 以使您的文件上传输入元素可见,如下所示:

    var fileInputElement = Driver.FindElement(By.CssSelector("#AttachFile"));
    
    // display the file input so we can send keys
    (IJavaScriptExecutor)_driver.ExecuteScript("arguments[0].style.display = 'block';", fileInputElement);
    
    fileInputElement.SendKeys(@"C:\Users\Shea.Leonard\Desktop\Upload20190625161051.csv");
    
    

    如果这不起作用,我会尝试手动导航到此页面并右键单击您要发送密钥的文件输入元素。

    使用 devtools,您可以手动在文件输入元素中输入文本(就像 WebDriver 一样),您可以查看那里是否出现相同的问题。进行比较后,您将更好地了解问题是否与 WebDriver 或网页本身有关。

    最后....我还会尝试使用不同的文件路径字符串格式。例如,您使用(@"C:\Users\Shea.Leonard\Desktop\Upload20190625161051.csv")。我还会尝试使用 ("C:\\Users\\Shea.Leonard\\Desktop\\Upload20190625161051.csv"); 作为健全性测试,以确保您提供的文件路径没有问题。

    您收到与文件 .csv 格式相关的错误消息这一事实让我相信您在这方面的做法是正确的。这里最可能的情况是手动上传文件和自动上传文件正在向 UI 发送不同的文本字符串。因此,尝试使用您发送到文件输入的不同文本字符串可能会解决您的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-12
      • 1970-01-01
      • 2021-03-07
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多