检测特定文本的位置

Detect location of specific text

Appium 1.5.0 
Xcode  7.3 
IOS 10.11.4 OSX EI Capitan
Using on:Simulator iOS 8.1

假设我们有一个文本字段 To see more information clickhereand to get more click here.

所以我使用 xpath 识别了文本,我可以得到它的位置和大小。 现在我们能以某种方式获得 here 的位置吗?我需要单击它,但因为它不是一个元素,所以我无法搜索它。所以如果我能得到它的位置,我就可以 tap 了。

但是我们如何才能获得它的位置并仍然保持它的通用性以便它在不同的设备上运行?

使用 Objective C 的想法(我知道 OP 使用 Appium 但他让我回答)是使用 TTTAttributedLabel 之类的库并以这种方式使用它:

创建TTTAttributedLabelUILabel子类),将文本内容放入其中,就好像是一个UILabel。将其委托设置为自我。然后,以这种方式向单词添加 link :

NSRange rangeWord = [attributedLabel.text rangeOfString:@"here"];
[attributedLabel addLinkToURL:[NSURL URLWithString:@"anActionOnClickHere"] withRange:rangeUser];

点击文字时,它会调用此方法,您可以在其中处理点击:

- (void)attributedLabel:(__unused TTTAttributedLabel *)label
   didSelectLinkWithURL:(NSURL *)url {
    NSString *urlToString = [url absoluteString];

    if ([urlToString containsString:@"anActionOnClickHere"]) { //perform segue for example
        [self performSegueWithIdentifier:@"hereSegue" sender:self];
    }
}

我完全不知道Python,希望你能找到一个等效的方法。

没有任何直接的方法可以实现这一点(Appium 本身没有 API 可用)。 但是,我的解决方案是通用的,适用于所有设备(Android 和 iOS),所有编程语言实现。

  1. [您已经完成]获取元素的位置和大小。
  2. 对当前屏幕进行截图。
  3. 使用图片的位置和大小从屏幕截图中裁剪图片。[如果没有模糊目标,可以跳过此步骤]
  4. [您只需手动执行此操作一次]裁剪出您想要获取位置的图像部分。
  5. 搜索裁剪图像的位置,获取位置并执行精确tap/click。

图片搜索参考这里:How to find an image within another image using python