我们的 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。
为了重现错误:
cmd.exe /k java -jar C:\git\selenium-test\Server\selenium-server-4.21.0.jar standalone --selenium-manager true
[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);
}
}
测试失败,出现以下错误: 测试失败
截图显示输入设置不正确: 截图
如您所见,测试不会在输入中键入多个字符,例如:#&@。
第二次发布这个问题,因为第一个问题因缺乏调试细节而被关闭。我希望这个问题更好,有人可以帮助我解决这个问题。
我现在有两个解决方法。一是如果我换成Firefox浏览器测试就会通过。
其他解决方法是我更改:
element.SendKeys(inputText);
至:
var actions = new Actions(webDriver);
actions.SendKeys(element, inputText);
actions.Perform();
这样就可以在输入字段中键入 #&@ 字符。
所以这似乎是 Chrome 浏览器或 Chrome 驱动程序的问题。