Не видя HTML, я не могу сказать вам с полной уверенностью.
Однако, это должно быть чрезвычайно легко (редактировать: известные последние слова).Это одна из двух вещей:
1) Атрибут title поля ввода.Если навести указатель мыши на что-либо или (если оно предназначено для этого) навести фокус на элемент с атрибутом заголовка, этот текст заголовка отображается в поле, подобном этому.Хотя коробка, безусловно, была стилизована.
2) Это пользовательский HTML-код div / other, который подключается к событию, которое включает в себя событие «focus» этого поля ввода.
ОбаТребуются разные способы получения текста.Поскольку они разные, мне нужно знать html.Пожалуйста, откройте Инструменты разработчика вашего браузера и проверьте поле электронной почты.Затем скопируйте html вокруг этого элемента, включая все, что содержит текст всплывающей подсказки, показанный выше.
Как только вы вставите этот html, ответ будет простым.
Редактировать: Я абсолютно в тупике.Я просмотрел html, просмотрел список событий и файлы javascript.Там нет ссылки на текст, показанный в этой подсказке.
Кроме того, он отображается как всплывающая подсказка на основе атрибутов «title».Это не div.Тем не менее, название не просто существует в DOM для элемента.Я не знаю, какое волшебство разработчики сделали для этой страницы, чтобы все это произошло.Я веб-разработчик, а также инженер по автоматизации, и это вне меня.Возможно, это не то, с чем я сталкивался раньше, или я просто упускаю что-то, что заставляет меня чувствовать себя глупо, когда я это тоже вижу.
В связи с этим я настоятельно рекомендую вам спросить разработчиковпрямо на этой странице то, что они сделали, чтобы этот заголовок выглядел так, как он есть (без существующего в html и без ссылок в javascript где-либо).
Edit # 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, либо с помощью кого-то с лучшим ответом, чем у меня, либо с помощью разработчиков, которые создали этот код.При этом, если вам нужно что-то, что работает прямо сейчас, это должно дать вам некоторое мгновенное удовлетворение, пока не будет найдено лучшее решение.