2015-09-17 18 views
6

Dường như điều này được sử dụng để hoạt động nhưng không còn hoạt động nữa. Có lẽ có một số chuyển đổi một nơi nào đó cho phép nó? Sử dụng mã nàyLàm cách nào để sử dụng UI Automation để truy xuất văn bản từ Edge Browser

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; 
    } 
} 

Tính năng này hoạt động trên các ứng dụng Metro có bộ phận cạo râu (mặc dù hơi bị cuộn nếu bạn cuộn quá nhanh). Đối với tệp kê khai tôi đang sử dụng uiAccess = true, AsInvoker. Khi chạy với tư cách Quản trị viên, nó không giúp ích gì.

Cập nhật. Một giải pháp sử dụng WebDriver có thể chấp nhận được nếu nó có thể thực hiện tương tự.

+0

Tại điểm nào không mã không còn làm việc như mong đợi? (Ví dụ, mẫu văn bản không được hỗ trợ, hoặc RangeFromPoint() trả về một phạm vi bất ngờ.) Cần có một phần tử trong Edge hỗ trợ mẫu Văn bản. Vì vậy, có lẽ FromPoint() không trả lại yếu tố đó. Bạn có thể kiểm tra các thuộc tính của phần tử đó để xác định phần tử nào bạn có. Nếu nó không phải là phần tử hỗ trợ mẫu Văn bản, có thể bạn có thể điều hướng đến phần tử Mẫu văn bản từ phần tử được trả về bởi FromPoint(). –

+0

Có thể là từ điểm không hoạt động, mặc dù tôi cần điều đó. – tofutim

+4

Câu hỏi của bạn quá rộng vì có thể/nên hoạt động trong trường hợp chung. Vui lòng cung cấp trường hợp repro đầy đủ. –

Trả lời

0

Tại thời điểm viết Microsoft Edge không được hỗ trợ bởi CodedUI, họ đã đề cập đến họ đang đánh giá hỗ trợ nhưng hiện tại bạn không thể sử dụng nó: Liên kết này cho thấy một lỗi đệ về vấn đề này: https://connect.microsoft.com/VisualStudio/feedback/details/1551238/vs2015-supports-codedui-automation-test-for-edge-browser

WebDriver là hiện tại là cách tốt nhất để tự động hóa Microsoft Edge. Tuy nhiên nhìn vào mã ở trên bạn không thể làm chính xác điều tương tự. Với WebDriver, bạn có thể định vị một phần tử theo Id, ClassName, TagName, Name, LinkText, một phần văn bản liên kết, CSS, Xpath nhưng theo tôi biết bạn không thể định vị một đối tượng từ x, y phối hợp như bạn làm ví dụ trên.

Để bắt đầu với Trình quản lý trang web. Tạo ứng dụng bảng điều khiển. Cài đặt các gói sau:

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

cài đặt Các đúng Microsoft WebDriver tùy thuộc vào hệ điều hành của bạn:

Thông tin thêm về Microsoft WebDriver có thể được tìm thấy here.

Sau đó bạn có thể thêm một số mã để lái xe WebDriver, ví dụ sau đi vào blog của tôi và trở nên một yếu tố thông qua đó là tên lớp css:

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(); 
       } 
      } 
     } 
    } 
} 
Các vấn đề liên quan