【发布时间】:2020-12-04 21:31:11
【问题描述】:
我想通过让 Appium 点按歌曲名称来播放歌曲。是否有代码可以让我使用 TEXT 字段点击任何元素?我不能在这里使用资源 id 字段,因为稍后会有多首歌曲。我尝试使用By.xpath("//android.widget.EditText[@text='"+song name+"']");,但没有奏效。
【问题讨论】:
我想通过让 Appium 点按歌曲名称来播放歌曲。是否有代码可以让我使用 TEXT 字段点击任何元素?我不能在这里使用资源 id 字段,因为稍后会有多首歌曲。我尝试使用By.xpath("//android.widget.EditText[@text='"+song name+"']");,但没有奏效。
【问题讨论】:
您在 xpath 中的类名错误。
根据我在 uiautomatorviewer 上看到的应该是以下内容
By.xpath("//android.widget.TextView[@text='"+songname+"']");
【讨论】:
找到了解决方案。我必须在测试中编写以下代码:
capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, AutomationName.ANDROID_UIAUTOMATOR2);
现在我可以通过在 XPath 中写入歌曲名称来使用 TEXT 值,如下所示:
By.xpath("//*[@text='" + element + "']");
这里的元素是UIAutomatiorViewer中显示的文本值。
【讨论】:
There is no need to using custom xpath for this.
First you have to take all the elements with that resource ID and click on required element if it contains the text on which you want to click.
You can use the below code.
List<WebElement> elements = driver.findElements(By.id("resource-id"));
For(WebElement element:elements)
{
if(element.getText().equals("textProperty"))
{
element.click();
break;
}
}
【讨论】:
如果@bsk 答案不起作用。可能是换行的原因...
你能试试这个来验证吗?
By.xpath("//android.widget.TextView[contains(@text, 'Ishq De Fanniyar (Female)')]");
使用@resource-id 也不是一个坏习惯......
By.xpath("//android.widget.TextView[@resource-id='com.xefyr.ridez:id/tv_song_title' and contains(@text, 'Ishq De Fanniyar (Female)')]");
【讨论】:
MobileBy.AndroidUIAutomator("new UiSelector().resourceId(\"com.xefyr.ridez:id/tv_song_title\").textContains(\"Ishq\");"); 通过 UIAutomator 技术进行搜索。在调试窗口中,我可以看到 [AndroidBootstrap] [BOOTSTRAP LOG] [debug] Using: UiSelector[CONTAINS_TEXT=Ishq, RESOURCE_ID=com.xefyr.ridez:id/tv_song_title] 但它仍然失败,没有元素找到消息。