-
Notifications
You must be signed in to change notification settings - Fork 189
Closed
Labels
Description
Description
When element is defined inside Page object, then I am getting this kind of error (see stack-trace). Elements, which are found using method: _driver.FindElementByXPath or _driver.FindElementById using the same selectors are working fine.
Environment
- Target framework: net core 2.1
- Appium server: 1.15.1
- Desktop OS/version used to run Appium if necessary: Windows 10
- Mobile platform/version under test: Google nexus with Android 5.1.1 and OnePlus5 with Android 9
- Real device or emulator/simulator: real devices
Details
Test method, named - PlusTest() is failing, other tests are passing. Seems, like it is related to this post: #163
Code To Reproduce Issue [ Good To Have ]
CalculatorMainPage.cs:
namespace AppiumPilotProject
{
public class CalculatorMainPage
{
[FindsByAndroidUIAutomator(XPath = "//android.widget.Button[@resource-id='com.android.calculator2:id/digit_2']")]
[FindsBy(How = How.XPath, Using = "//android.widget.Button[@resource-id='com.android.calculator2:id/digit_2']")]
public IWebElement Digit2Btn { get; set; }
[FindsByAndroidUIAutomator(XPath = "//android.widget.Button[@resource-id='com.android.calculator2:id/digit_5']")]
[FindsBy(How = How.XPath, Using = "//android.widget.Button[@resource-id='com.android.calculator2:id/digit_5']")]
public IWebElement Digit5Btn { get; set; }
[FindsBy(How = How.XPath, Using = "//android.widget.Button[@resource-id='com.android.calculator2:id/digit_9")]
public IWebElement Digit9Btn { get; set; }
[FindsBy(How = How.XPath, Using = "//android.widget.Button[@resource-id='com.android.calculator2:id/op_add")]
public IWebElement PlusBtn { get; set; }
[FindsBy(How = How.XPath, Using = "//android.widget.Button[@resource-id='com.android.calculator2:id/op_sub")]
public IWebElement MinusBtn { get; set; }
[FindsBy(How = How.XPath, Using = "//android.widget.Button[@resource-id='com.android.calculator2:id/op_mul")]
public IWebElement MultiplyBtn { get; set; }
[FindsBy(How = How.XPath, Using = "//android.widget.Button[@resource-id='com.android.calculator2:id/eq")]
public IWebElement EqualsBtn { get; set; }
[FindsBy(How = How.XPath, Using = "//android.widget.EditText[@resource-id='com.android.calculator2:id/formula")]
public IWebElement ResultField { get; set; }
}
}
UnitTests.cs:
namespace AppiumPilotProject
{
public class Tests
{
private AndroidDriver<AppiumWebElement> _driver;
private CalculatorMainPage _calculatorMainPage;
private AppiumLocalService _appiumLocalService;
[SetUp]
public void Setup()
{
_appiumLocalService = new AppiumServiceBuilder().UsingAnyFreePort().Build();
_appiumLocalService.Start();
DriverOptions caps = new AppiumOptions();
caps.AddAdditionalCapability(MobileCapabilityType.DeviceName, "R32CC02AGJK");
caps.AddAdditionalCapability("appPackage", "com.android.calculator2");
// caps.AddAdditionalCapability(MobileCapabilityType.App, "com.oneplus.calculator");
caps.AddAdditionalCapability("appActivity", "com.android.calculator2.Calculator");
// caps.AddAdditionalCapability("appActivity", "com.oneplus.calculator.Calculator");
caps.AddAdditionalCapability(MobileCapabilityType.PlatformName, "Android");
caps.AddAdditionalCapability(MobileCapabilityType.PlatformVersion, "5.1.1");
// caps.AddAdditionalCapability(MobileCapabilityType.NoReset, true);
caps.AddAdditionalCapability(MobileCapabilityType.AutomationName, "UiAutomator2");
// _driver = new AndroidDriver<AppiumWebElement>(
// _appiumLocalService, caps);
_driver = new AndroidDriver<AppiumWebElement>(
new Uri("http://127.0.0.1:4723/wd/hub"), caps);
TimeOutDuration timeSpan = new TimeOutDuration(new TimeSpan(0, 0, 0, 10, 0));
_calculatorMainPage = new CalculatorMainPage();
PageFactory.InitElements(_driver, _calculatorMainPage, new AppiumPageObjectMemberDecorator(timeSpan));
}
[Test]
public void PlusTest()
{
_calculatorMainPage.Digit5Btn.Click();
_calculatorMainPage.PlusBtn.Click();
_calculatorMainPage.Digit2Btn.Click();
_calculatorMainPage.EqualsBtn.Click();
var result = _calculatorMainPage.ResultField.Text;
Assert.AreEqual(14, int.Parse(result));
}
[Test]
public void MinusTest()
{
AppiumWebElement firstNumber =
_driver.FindElementByXPath("//android.widget.Button[@resource-id='com.android.calculator2:id/digit_5']");//FindElementById("com.android.calculator2:id/digit_5");
firstNumber.Click();
AppiumWebElement plusButton = _driver.FindElementByXPath("//android.widget.Button[@resource-id='com.android.calculator2:id/op_sub']");
plusButton.Click();
AppiumWebElement secondNumber = _driver.FindElementByXPath("//android.widget.Button[@resource-id='com.android.calculator2:id/digit_2']");
secondNumber.Click();
AppiumWebElement equalsButton = _driver.FindElementByXPath("//android.widget.Button[@resource-id='com.android.calculator2:id/eq']");
equalsButton.Click();
AppiumWebElement resultField = _driver.FindElementByXPath("//android.widget.EditText[@resource-id='com.android.calculator2:id/formula']");
var result = resultField.Text;
var intResult = int.Parse(result);
Console.WriteLine(intResult);
Assert.AreEqual(3, intResult);
}
[Test]
public void MultipleTest()
{
IWebElement firstNumber = _driver.FindElementById("com.android.calculator2:id/digit_5");
firstNumber.Click();
IWebElement plusButton = _driver.FindElementById("com.android.calculator2:id/op_mul");
plusButton.Click();
IWebElement secondNumber = _driver.FindElementById("com.android.calculator2:id/digit_9");
secondNumber.Click();
IWebElement equalsButton = _driver.FindElementById("com.android.calculator2:id/eq");
equalsButton.Click();
IWebElement resultField = _driver.FindElementById("com.android.calculator2:id/formula");
var result = resultField.Text;
Assert.AreEqual(45, int.Parse(result));
}
[TearDown]
public void AfterTest()
{
_driver.Quit();
_appiumLocalService.Dispose();
}
}
}
Exception stacktraces
Test Name: PlusTest
Test FullName: AppiumPilotProject.Tests.PlusTest
Test Source: D:\c#_projects\AppiumPilotProject\AppiumPilotProject\UnitTest1.cs : line 49
Test Outcome: Failed
Test Duration: 0:00:14,993
Result StackTrace:
at OpenQA.Selenium.Appium.PageObjects.Interceptors.ElementInterceptor.getTarget(IInvocation ignored)
at OpenQA.Selenium.Appium.PageObjects.Interceptors.SearchingInterceptor.Intercept(IInvocation invocation)
at Castle.DynamicProxy.AbstractInvocation.Proceed()
at AppiumPilotProject.Tests.PlusTest() in D:\c#_projects\AppiumPilotProject\AppiumPilotProject\UnitTest1.cs:line 54
--WebDriverTimeoutException
at OpenQA.Selenium.Support.UI.DefaultWait`1.ThrowTimeoutException(String exceptionMessage, Exception lastException)
at OpenQA.Selenium.Support.UI.DefaultWait`1.Until[TResult](Func`2 condition)
at OpenQA.Selenium.Appium.PageObjects.Interceptors.ElementInterceptor.getTarget(IInvocation ignored)
Result Message:
OpenQA.Selenium.NoSuchElementException : Couldn't locate an element by these strategies: Locator map:
- native content: "By.Id: <Digit5Btn>k__BackingField; "
- html content: "ByIdOrName([<Digit5Btn>k__BackingField]); "
----> OpenQA.Selenium.WebDriverTimeoutException : Timed out after 1 seconds
Link to Appium logs
https://gist.github.com/Ukrainis/82424f7dccc791e6362ad89f5f2fcdae