2015-09-17 12 views
6

से टेक्स्ट पुनर्प्राप्त करने के लिए मैं UI ऑटोमेशन का उपयोग कैसे करूं ऐसा लगता है कि यह काम करता था, लेकिन अब नहीं करता है। शायद कुछ टॉगल कहीं है जो इसे सक्षम बनाता है? इस कोड का उपयोगएज ब्राउज़र

private static async Task<string> getText(double x, double y) 
{ 
    try 
    { 
     var location = new System.Windows.Point(x, y); 
     AutomationElement element = AutomationElement.FromPoint(location); 

     object patternObj; 
     if (element.TryGetCurrentPattern(TextPattern.Pattern, out patternObj)) 
     { 
      var textPattern = (TextPattern)patternObj; 

      var range = textPattern.RangeFromPoint(location); 
      range.ExpandToEnclosingUnit(TextUnit.Word); 

      var text = range.GetText(-1).Trim(); 
      return text; 
     } 
     else 
     { 
      return "no text found"; 
     } 
    } 
    catch (Exception ex) 
    { 
     return ex.Message; 
    } 
} 

यह ब्रोवर के साथ मेट्रो ऐप्स पर काम करता है (हालांकि यदि आप बहुत तेज़ी से स्क्रॉल करते हैं तो थोड़ा सा फ्लैकी)। मैनिफेस्ट के लिए मैं uiAccess = true, AsInvoker का उपयोग कर रहा हूं। प्रशासक के रूप में चलाने पर, यह मदद नहीं करता है।

अद्यतन। वेबड्राइवर का उपयोग करने वाला एक समाधान स्वीकार्य है यदि यह वही काम कर सकता है।

+0

किस बिंदु पर कोड अब अपेक्षा के अनुरूप काम करता है? (उदाहरण के लिए, टेक्स्ट पैटर्न समर्थित नहीं है, या RangeFromPoint() एक अप्रत्याशित रेंज देता है।) एज में एक तत्व होना चाहिए जो पाठ पैटर्न का समर्थन करता है। तो शायद FromPoint() उस तत्व को वापस नहीं कर रहा है। क्या आप यह निर्धारित करने के लिए उस तत्व के गुणों की जांच कर सकते हैं कि आपके पास कौन सा तत्व है। यदि यह टेक्स्ट पैटर्न का समर्थन करने वाला तत्व नहीं है, तो हो सकता है कि आप FromPoint() द्वारा लौटाए गए तत्व से टेक्स्ट पैटर्न तत्व पर नेविगेट कर सकें। –

+0

यह संभव है कि बिंदु से काम नहीं करता है, हालांकि मुझे इसकी आवश्यकता है। – tofutim

+4

आपका प्रश्न बहुत व्यापक है क्योंकि यह सामान्य मामले में काम कर सकता/चाहिए। कृपया एक पूर्ण रेपो केस प्रदान करें। –

उत्तर

0

माइक्रोसॉफ्ट एज लिखने के समय CodedUI द्वारा समर्थित नहीं है, वे उल्लेख किया है वे समर्थन का मूल्यांकन कर रहे हैं लेकिन वर्तमान में आप इसका इस्तेमाल नहीं कर सकते हैं: https://connect.microsoft.com/VisualStudio/feedback/details/1551238/vs2015-supports-codedui-automation-test-for-edge-browser

WebDriver है: यह लिंक मुद्दे पर दायर बग से पता चलता वर्तमान में माइक्रोसॉफ्ट एज के स्वचालन करने का सबसे अच्छा तरीका है। हालांकि आप ऊपर दिए गए कोड को देखकर बिल्कुल वही काम नहीं कर पाएंगे। वेबड्राइवर के साथ आप आईडी, क्लासनाम, टैगनाम, नाम, लिंकटेक्स्ट, आंशिक लिंक टेक्स्ट, सीएसएस, एक्सपैथ द्वारा एक तत्व का पता लगा सकते हैं, लेकिन जहां तक ​​मुझे पता है कि आप एक्स, वाई समन्वय से ऑब्जेक्ट का पता नहीं लगा सकते हैं जैसा आप करते हैं उपरोक्त उदाहरण।

वेबड्राइवर से शुरू करने के लिए। एक कंसोल ऐप बनाएं। निम्न पैकेज स्थापित करें:

Install-Package Selenium.RC 
Install-Package Selenium.WebDriver 
Install-Package Selenium.WebDriverBackedSelenium 
Install-Package Selenium.Support 

अपने ऑपरेटिंग सिस्टम के आधार स्थापित सही माइक्रोसॉफ्ट WebDriver:

  • Windows 10 के लिए 10240 का निर्माण, माइक्रोसॉफ्ट WebDriver की this version स्थापित करें।
  • विंडोज 10 फॉल 2015 अपडेट, install Microsoft WebDriver Fall 2015 Update के लिए।
  • माइक्रोसॉफ्ट वेबड्राइवर के विंडोज़ अंदरूनी कार्यक्रम, install this version से नवीनतम पूर्वावलोकन निर्माण के लिए।

माइक्रोसॉफ्ट वेबड्राइवर पर अधिक जानकारी here मिल सकती है।

फिर आप कुछ कोड WebDriver ड्राइव करने के लिए जोड़ सकते हैं, निम्न उदाहरण अपने ब्लॉग पर चला जाता है और एक तत्व के माध्यम से इसे सीएसएस वर्ग के नाम है हो जाता है:

using System; 
using System.IO; 
using OpenQA.Selenium; 
using OpenQA.Selenium.Edge; 
using OpenQA.Selenium.Remote; 
using OpenQA.Selenium.Support.UI; 

namespace SampleGetText 
{ 
    public class Program 
    { 
     static void Main(string[] args) 
     { 
      var text = GetText(); 
     } 

     public static string GetText() 
     { 
      RemoteWebDriver driver = null; 
      string serverPath = "Microsoft Web Driver"; 
      // Makes sure we uses the correct ProgramFiles depending on Enviroment 
      string programfiles = Environment.Is64BitOperatingSystem ? "%ProgramFiles(x86)%" : "%ProgramFiles%"; 

      try 
      { 
       // Gets loaction for MicrosoftWebDriver.exe 
       serverPath = Path.Combine(System.Environment.ExpandEnvironmentVariables(programfiles), serverPath); 

       //Create a new EdgeDriver using the serverPath 
       EdgeOptions options = new EdgeOptions(); 
       options.PageLoadStrategy = EdgePageLoadStrategy.Eager; 
       driver = new EdgeDriver(serverPath, options); 

       //Set a page load timeout for 5 seconds 
       driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(5)); 

       // Navigate to my blog 
       driver.Url = "https://blogs.msdn.microsoft.com/thebeebs/"; 

       // Find the first element on my screen with CSS class entry-title and return the text 
       IWebElement myBlogPost = driver.FindElement(By.ClassName("entry-title")); 
       return myBlogPost.Text; 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine(e.Message); 
       return ""; 
      } 
      finally 
      { 
       if (driver != null) 
       { 
        driver.Close(); 
       } 
      } 
     } 
    } 
} 
संबंधित मुद्दे