Question

I have a webview in an ios app that basically has no id or class. (I know, right?) But it does have a textContent field that I would like to use to select elements.

This is the element I want to find:

{"rect"=>
   {"center_x"=>307.5,
    "left"=>295,
    "bottom"=>136,
    "right"=>320,
    "top"=>93,
    "width"=>25,
    "height"=>43,
    "center_y"=>178.5},
  "nodeName"=>"LI",
  "id"=>"",
  "textContent"=>"!!!   I WANT TO FIND IT BY THIS   !!!",
  "center"=>{"X"=>307.5, "Y"=>178.5},
  "nodeType"=>"ELEMENT_NODE",
  "webView"=>
   "<UIWebView: 0xe2e1400; frame = (0 0; 320 504); clipsToBounds = YES; autoresize = W+H
  "class"=>"arrow",
  "html"=>"<div class=\"arrow\"></div>"}

So I was able to find this using css pseudo-selectors alá

query("webView css:'el:first-child'")

I can find it by using the hashes in the results array alá

query("webView css:'li'").select {|element| element["textContent"] == "!!!   I WANT TO FIND IT BY THIS   !!!}

And I can refactor it a bit to use a regex alá

query("webView css:'li'").select {|element| element["textContent"] =~ /I WANT/}

But all this feels really dirty. Very un-Calabashy. Is there a better way to write this?

Was it helpful?

Solution

I have not tried your exact setup. But I do often use queries with the LIKE comparison on label. Would that solve your problem?

ex. element_exists("label {text LIKE 'I WANT TO FIND'}")

OTHER TIPS

I wound up going with this:

query("webView css:'TITLE'{textContent CONTAINS ’I WANT’}")

It tends to work more consistently with these particular webviews (given a lack of accessibility labels in the code).

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top