没有看到 html,我不能完全自信地告诉你。
但是,它应该非常容易(编辑:著名的遗言)。这是两件事之一:
1)输入字段的title属性。将鼠标悬停在某物上,或者(如果设计为)将焦点放在具有标题属性的元素上会在这样的框中显示标题文本。虽然盒子肯定是程式化的。
2) 这是一个自定义 div/other html,它连接到一个涉及该输入字段的“焦点”事件的事件。
两者都需要不同的方式来获取文本。因为它们不同,所以我需要知道所涉及的 html。请打开浏览器的开发者工具,并检查电子邮件字段。然后,复制该元素周围的 html,包括上面显示的工具提示文本。
粘贴该 html 后,答案将很简单。
编辑:我完全被难住了。我查看了 html,搜索了事件列表和 javascript 文件。没有对该工具提示中显示的文本的引用。
此外,它呈现为基于“标题”属性的工具提示。它不是一个div。然而标题并不仅仅存在于元素的 DOM 中。我不知道开发人员为这个页面做了什么魔法来让这一切发生。我是一名网络开发人员,也是一名自动化工程师,这超出了我的范围。它可能只是我以前没有遇到过的东西,或者我可能只是错过了一些一旦我看到它就会让我感到愚蠢的东西。
因此,我强烈建议您直接询问此页面的开发人员,他们做了什么使该标题显示为原来的样子(在 html 中不存在,并且在任何地方的 javascript 中都没有引用)。
编辑#2:这是我提到的最后的图像识别。它使用 AForge,它很容易作为 dll 拉入。如果使用 Visual Studio,您可以将其作为 nuget 包获取。
using AForge.Imaging;
using System.Drawing;
using System.IO;
using OpenQA.Selenium;
public static class AssertImages
{
//97.5% match expected. 100% is too strict, and practicly impossible. The lower the value you provide, the more possibly it is for a false match.
//Never go below 75%. False matches above 75% are generally only possible if the baseline image is very generic, such as a basic shape or colored item.
public const float BASE_EXPECTED_MATCH_PERCENT = 0.975f;
/// <summary>
/// Determines if a provided baseline image exists within a screenshot of the current browser window .
/// </summary>
/// <param name="relativePathToBaseline"> Pass the relative url to the baseline image we are searching for.</param>
/// <param name="matchExpected">Optional parameter that modifies the expected percent match. Use this when a baseline image may be stretched, different colored, or otherwise slightly modified from provided baseline.</param>
/// <returns></returns>
public static bool DoesScreenshotContain(string relativePathToBaseline, float matchExpected = BASE_EXPECTED_MATCH_PERCENT)
{
//Save screenhot as source image in jpeg format. Then, read jpeg as bitmap.
Screenshot ss = ((ITakesScreenshot)BaseTest.Driver).GetScreenshot();
string tempFile = Path.Combine(Path.GetTempPath(), "temp_screenshot.jpg");
ss.SaveAsFile(tempFile, ScreenshotImageFormat.Jpeg);
Bitmap sourceImage = new Bitmap(new MemoryStream(File.ReadAllBytes(tempFile)));
Bitmap template = new Bitmap(Path.Combine(Reporting.BaseDirectory, "Suite", "ImageRecognition", "Baselines", relativePathToBaseline));
//Find baseline in template image.
ExhaustiveTemplateMatching tm = new ExhaustiveTemplateMatching(BASE_EXPECTED_MATCH_PERCENT);
return tm.ProcessImage(sourceImage, template).Length > 0;
}
}
然后,为工具提示内的文本拍照以用作基线。如下所述,我非常犹豫是否将其用作最终解决方案。更好的选择是找到一种使用 Selenium 或直接 javascript 的方法,或者通过比我有更好答案的人,或者在编写此代码的开发人员的帮助下。话虽如此,如果您现在需要一些可以工作的东西,这应该会给您一些即时的满足感,直到找到更好的解决方案。