[英]Unable to click on an element by using xpaht in Android (Appium)
[英]Wanted to click on android element using appium by providing xpath
我有一个按钮onclick事件,但是在运行时实际上并没有真正单击该按钮。当我执行.isDisplayed()时,总是会找到该元素。 但是,测试仍然失败。 在这里,我想单击“不是现在”按钮,但是在以下代码中不起作用,我该怎么办?
WebElement c=driver.findElement(By.xpath("//android.widget.Button[@resource-id='android:id/button2']"));
if(c.isDisplayed())
{
c.click();
}
Thread.sleep(20000);
driver.findElement(By.xpath("//android.widget.EditText[@text='Email']")).sendKeys("testappium@gmail.com");
我也尝试下面的代码,但我没有工作
driver.findElement(By.xpath("//android.widget.FrameLayout[@bounds='[27,724][1053,1267]']/android.widget.FrameLayout[@bounds='[75,772][1005,1219]']/android.widget.FrameLayout[@resource-id='android:id/content']/android.widget.LinearLayout[@resource-id='android:id/parentPanel']/android.widget.LinearLayout[@resource-id='android:id/buttonPanel']/android.widget.Button[@bounds='[517,1063][777,1207]']")).click();
还尝试了以下代码:
driver.findElement(By.xpath("//*[@class='android.widget.Button' and @bounds='[517,1063][777,1207]']")).click();
我得到的错误是:
Exception in thread "main" org.openqa.selenium.NoSuchElementException: An element could not be located on the page using the given search parameters.
For documentation on this error, please visit: https://www.seleniumhq.org/exceptions/no_such_element.html
*** Element info: {Using=xpath, value=//android.widget.EditText[@text='Email']}
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158)
at io.appium.java_client.remote.AppiumCommandExecutor.execute(AppiumCommandExecutor.java:239)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
at io.appium.java_client.DefaultGenericMobileDriver.execute(DefaultGenericMobileDriver.java:42)
at io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:1)
at io.appium.java_client.android.AndroidDriver.execute(AndroidDriver.java:1)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:323)
at io.appium.java_client.DefaultGenericMobileDriver.findElement(DefaultGenericMobileDriver.java:62)
at io.appium.java_client.AppiumDriver.findElement(AppiumDriver.java:1)
at io.appium.java_client.android.AndroidDriver.findElement(AndroidDriver.java:1)
at org.openqa.selenium.remote.RemoteWebDriver.findElementByXPath(RemoteWebDriver.java:428)
at io.appium.java_client.DefaultGenericMobileDriver.findElementByXPath(DefaultGenericMobileDriver.java:152)
at io.appium.java_client.AppiumDriver.findElementByXPath(AppiumDriver.java:1)
at io.appium.java_client.android.AndroidDriver.findElementByXPath(AndroidDriver.java:1)
at org.openqa.selenium.By$ByXPath.findElement(By.java:353)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:315)
at io.appium.java_client.DefaultGenericMobileDriver.findElement(DefaultGenericMobileDriver.java:58)
at io.appium.java_client.AppiumDriver.findElement(AppiumDriver.java:1)
at io.appium.java_client.android.AndroidDriver.findElement(AndroidDriver.java:1)
at execution.AppTest.main(AppTest.java:183)
UI Automator查看器:
您可以在此处直接使用ID。
WebElement element=driver.findElement(By.xpath("//android.widget.Button[@text='Not Now']"));
if(element.isDisplayed()){
element.click();
}
检查以下XPath有多少匹配项
String xPath = "//*[@resource-id='android:id/button2']";
如果有多个匹配项,则在下面的XPath中传递匹配的索引号:
String xPath = "(//*[@resource-id='android:id/button2'])[matching index number]";
在搜索元素或执行任何操作之前,请稍稍延迟一下。 试试下面的代码:
Thread.sleep(3000);
String xPath = "//*[@resource-id='android:id/button2']";
List<WebElement> notNow = driver.findElements(By.xpath(xPath));
if(notNow.size() > 0) {
notNow.get(0).click(); // You can pass the matching index in get() also if there are multiple matches
}
或者,您可以使用下面的XPath,在尝试查找之前给一些延迟:
String xPath = "//android.widget.TextView[@text='Text That You Want to locate']"
希望对您有帮助...
你可以这样使用
WebElement element=driver.findElement(By.xpath("//android.widget.Button[@id='button2']"));
if(element.isDisplayed())
{
element.click();
}
要么
string elementId = driver.findElement(By.Id("button2"));
if(elementId.isDisplayed){ element.click(); }
两者都应该工作
在appium中不建议使用xpath。
您可以使用findElementById之类的
driver.findElementById("android:id/button2").click()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.