UI testing ListView, getting count and specific item - xamarin

I am able create a UI Test for ListView on iOS. However, the same code doesn't work on Android.
On iOS, list count is what I expect to be in the list. On Android, the list count is +1. I am also not able to get the data from the list at a particular position.
Below, is my code that works well for iOS, but is not working for Android.
Is it possible that same script that is working for iOS may not work for Android?
//count the number of child in the list
Assert.That(app.Query(x =>
x.Marked("AutomationId_ProfileVehicleList").Child()).Length, Is.EqualTo(3));
//get the data from list and match
Assert.AreEqual(app.Query(c => c.Id("AutomationId_ProfileVehicle"))[0].Text,
"KA123C3");

//get the list count and use id of entry
Assert.That(app.Query(x => x.Marked("AutomationId_ProfileVehicle")).Length, Is.EqualTo(3));
//get the data from list and match
Assert.AreEqual(app.Query(x => x.Marked("AutomationId_ProfileVehicle"))[0].Text, "KA123C3");
this worked for me, instead of id, i used Marked

Related

Xamarin UItest query for similar elements

[Sceenshot][1]
[1]: https://i.stack.imgur.com/c5pkY.pngstrong text
I am trying to locate two similar elements ("Meer info"). On a previous build of the same app it works with this query:
_bewering1_helpbutton = x => x.Marked("De volgende gegegevens zijn bij ons bekend").Sibling("ImageRenderer");
Now this query gave 0 results. I think the reason is that our developer has changed the code in some places.
Is there any other way I can locate the elements "Meer info". It is not possible to use "Index" because on some small screens the locators are not visible at the same time.
I notice your REPL
You can use id to locate the elements "Meer info".
For testing, I use two Entrys, here is REPL
when I tab it, I enter the new value to it with
app.EnterText(c=>c.Marked("NoResourceEntry-2"), "1234567890123456")
Here is running GIF.

Kendo UI ComboBox for Angular: how to prevent Expected value of type Object error?

I am trying to make a Kendo ComboBox for Angular not crash with error "Prevent Expected value of type Object":
<kendo-combobox
formControlName="gender"
[data]="genders"
[textField]="'text'"
[valueField]="'value'"
[valuePrimitive]="false"
[filterable]="true"
[allowCustom]="true"
required
>
</kendo-combobox>
StackBlitz
The error can be obtained if the value is deleted and Tab is pressed (combo blur). In fact, by leaving an invalid value in the box, this error will occur.
I will explain below why I am using some settings:
textField and valueField - in my application I request complex objects and the selected value will provide some information to other form fields
[valuePrimitive]="false" - the selected value is a complex object
[allowCustom]="false" - I used this to allow the control to receive an initial value that is not among the list. In my application I am using server-side filtering with an empty initial list
When using in the application (server-side filtering) I also receive this error when pushing the arrow button, but I can get rid of this by either ensuring that initial value is within the list of values (ugly) or simply by removing the button.
Any idea about how to make this work?
According to Kendo UI for Angular you have to use a valueNormalizer function to convert what the user actually types into a valid object.
public valueNormalizer = (text: Observable<string>) => text.pipe(map((text: string) => {
return {
value: this.genders[this.genders.length - 1].value + 1, //whatever value
text: text
};
}));
Please check the updated Stackblitz and let me know if it is helpful.
valueNormalizer didn't work for me at all.
I went for a different solution (I can't post the code here because of security limitations in my company).
We want to allow an initial value and have to allow [allowCustomer]="true" because that initial value is not initially a part of the [data] array since we fetch it from the server.
I simply pushed the initial value to the [data] array and that fixes it. no need for [allowCustome]="true"

How to appendChild in the Wix Corvid/Code IDE

I've searched thru Corvid docs and Stack, not finding anything.
Is there a way to appendChild() in Wix Corvid(Code)?
EDIT: Wix does not allow DOM access directly. I assumed that people answering this would know i was looking for an alternative to appencChild and knew this method could not be used as is in Wix.
so to clarify: is there a way to add a child to a parent element using Wix's APIs?
It depends what you are trying to achieve,
the only thing off the top of my head is adding more items to a repeater
which you can do by first getting the initial data from the repeater, adding another item to array and reassign the data property of the repeater
const initialData = $w('#repeater').data
const newItem = {
_id: 'newItem1', // Must have an _id property
content: 'some content'
}
const newData = [...initialData, newItem]
$w('#repeater').data = newData
https://www.wix.com/corvid/reference/$w.Repeater.html#data
In Corvid, you cannot use any function which accesses the DOM.
Coming from one of the developers of Corvid:
Accessing document elements such as div, span, button, etc is off-limits. The way to access elements on the page is only through $w. One small exception is the $w.HtmlComponent (which is based on an iFrame). This element was designed to contain vanilla HTML and it works just fine. You just can't try to trick it by using parent, window, top, etc.
Javascript files can be added to your site's Public folder, but the same limitations apply - no access to the DOM.
Read more here: https://www.wix.com/corvid/forum/main/comment/5afd2dd4f89ea1001300319e

how to find visibility of element / image in calabash

I am working on calabash android with the platform ruby.
And I have to find the visibility of an element / image and it has id and as well only one property ie., enabled , that too always true.
and i tried the options isVisible , isDislayed but am not sure these properties exists
First try this command
query("*")
If it shows element, then proceed with getting element using ID.
query("* css:'#id_name'")
The above line will display all the element with ID=id_name.
Note: It will show only visible element.
If you need to get all element(visible/hidden), you need use this code:
query("* all css:'#id_name'")

Robotium : Getting number of items in spinner?

I'm a QA, and I'm new to android automation as such, and I am having problem in automating the spinner / Dropdown related activities in my app. I am using Robotium 4.1 for my automation.
The Spinner in my app is implemented using actionbarsherlock. The Hierarchyviewer shows it as Popupwindow:SOME-RANDOM-ID. It looks like the implementation is internal to actionbarsherlock. After talking to the dev he tells me that it's a "non-visible" element. I don't understand what that means, because I can see the element.
Also, I can't find the methods mentioned in some of the other questions here.
I suppose the right way is to use solo.getViews(), and solo.getCurrentViews etc. but I don't know how to use the parameters in there, so whatever I tried didn't work.
Can someone guide me with a detailed example? (including how to give the parameters to getViews etc will be much appreciated.)
How to get number of items:
mSpinner.getAdapter().getCount();
How to click on specified item on spinner:
solo.pressSpinnerItem(indexOfSpinner, indexOfItem);
How to get current spinners:
ArrayList<Spinner> currentSpinners = solo.getCurrentViews(Spinner.class);
How to get spinner with specified index:
Spinner spinner = getView(Spinner.class, index);

Resources