当selenium测试作为服务运行时,为什么Windows不能写@字符?

问题描述 投票:0回答:1

我们的 Jenkins 和 Selenium Grid 存在问题。我们正在使用自动化测试来测试 Web 应用程序,并且在将测试作为 Jenkins 作业运行时遇到问题。有一台计算机作为服务器运行,安装了 Windows 10 Pro 和 Jenkins。 Jenkins 作为服务运行,因此当服务器重新启动时它会自动运行。唯一的问题是,当 Jenkins 作为服务运行时,@ 字符不会以某种方式发送到输入字段。因此,测试想要在输入字段中写入电子邮件地址,但 @ 字符不会出现,并且测试因验证错误而失败(testtest.hu)。当Jenkins从cmd启动时,测试会通过,但是这样,Jenkins不会在启动时自动启动。为了确保这不是 Jenkins 问题,我安装了 Selenium Grid,但同样的情况发生了。当我从 cmd 运行它时,测试将通过,但是当我从任务计划程序启动它时,它们将失败。我知道区别在于,当它们从服务或任务调度程序运行时,它们处于会话 0 隔离中,但我找不到让测试在会话 0 隔离中通过的解决方案。浏览器:无头模式下的 Google Chrome。我不认为这是一个编码问题,因为带有重音符号的字符出现在输入字段中。

浏览器:无头模式下的 Google Chrome。

为了重现错误:

  • 操作系统:Windows 10 专业版
  • 我从任务计划程序运行 selenium 服务器,并选中“无论用户是否登录都运行”选项并启动,使用命令:
    cmd.exe /k java -jar C:\git\selenium-test\Server\selenium-server-4.21.0.jar standalone --selenium-manager true
  • 任务调度器
  • 任务调度命令
  • 单击“确定”后,我使用右键菜单运行预定的命令。之后服务器就在“http://127.0.0.1:4444/ui/”上运行。
  • 运行网格
  • 我使用 Visual Studio 2022 运行 LocalInputTest:
    [TestClass]
    public class LocalTest
    {
        [TestMethod]
        public void LocalInputTest()
        {
            ChromeOptions chromeOptions = new ChromeOptions();
            chromeOptions.AddArgument("--window-size=1920,1080");
            chromeOptions.AddArgument("--headless");
            var webDriver = new RemoteWebDriver(new Uri("http://localhost:4444/"), chromeOptions);
            webDriver.Navigate().GoToUrl("file:///C:/git/selenium-test/index.html");

            var inputText = "@éáőöüú<#&@{}>asd@";

            var element = webDriver.FindElement(By.XPath($"//*[@data-e2e-testing = 'problematic.input']"));
            element.SendKeys(inputText);

            var screenshot1 = (webDriver as ITakesScreenshot).GetScreenshot();
            screenshot1.SaveAsFile("C:/git/selenium-test/screenshot.png");

            var text = webDriver.FindElement(By.XPath($"//*[@data-e2e-testing = 'problematic.input']")).GetAttribute("value");
            Assert.AreEqual(inputText, text);
        }
    }

测试失败,出现以下错误: 测试失败

截图显示输入设置不正确: 截图

如您所见,测试不会在输入中键入多个字符,例如:#&@。

第二次发布这个问题,因为第一个问题因缺乏调试细节而被关闭。我希望这个问题更好,有人可以帮助我解决这个问题。

windows selenium-webdriver jenkins selenium-grid session-0-isolation
1个回答
0
投票

我现在有两个解决方法。一是如果我换成Firefox浏览器测试就会通过。

其他解决方法是我更改:

element.SendKeys(inputText);

至:

var actions = new Actions(webDriver);
actions.SendKeys(element, inputText);
actions.Perform();

这样就可以在输入字段中键入 #&@ 字符。

所以这似乎是 Chrome 浏览器或 Chrome 驱动程序的问题。

© www.soinside.com 2019 - 2024. All rights reserved.