Ruby 由于 NoSuchElementError,移动应用测试失败

Ruby mobile app test fails due to NoSuchElementError

我正在使用 Ruby 和 Appium 对 android 应用程序进行第一批自动化测试。我在点击工具栏时遇到问题,例如,我们在起始页上有按钮,使用此示例 -

$driver.find_element(:id, "com.domain.appname:id/starters").click if menu == "1"

现在可以正常工作了,但是当我尝试单击工具栏图标时 ->

$driver.find_element(:id, "com.domain.appname:id/toolbar").click

我收到这个错误 -

Selenium::WebDriver::Error::NoSuchElementError: An element could not be located on the page using the given search parameters.

工具栏元素在 toolbar.xml 中定义,因此

<?xml version="1.0" encoding="utf-8"?>`
<Toolbar xmlns:android="http://schemas.android.com/apk/res/android"`
    android:id="@+id/toolbar"`
    android:layout_width="match_parent"`
    android:layout_height="wrap_content"`
    android:minHeight="?android:attr/actionBarSize"`
    android:background="@color/rose"`
    android:theme="@android:style/ThemeOverlay.Material.ActionBar"/>

谁能告诉我我遗漏了什么

谢谢

您提供的 ID 不正确。所以让我们做点什么。编写以下内容将在控制台上打印所有 id,其中包括文本 toolbar 然后您一个一个地选择并在您的代码中使用,其中一个将单击正确的元素。如果工具栏只有一个,很可能必须只有一个。

require 'watir'
b=Watir::Browser.new
b.goto 'Your URL Here'
b.elements.each do |element|
  p element.id[/.*toolbar.*/] unless element.id[/.*toolbar.*/].nil?
end

上面的代码将打印所有包含 toolbar 文本的 id,然后将这些 id 一个接一个地复制并粘贴到您的程序中,肯定可以正常工作。

请记住,由于您使用了 Selenium 代码,即使元素存在晚了一点,它也会抛出错误。所以使用 WATIR 代码!

你也可以使用部分文本来定位元素,这是另一种方法是使用下面提到的正则表达式

b.element(id: /toolbar/).click

但是如果有两个以上的元素有文字toolbar,第一个会被点击,如果你想移动2或3,那么

b.elements(id: /toolbar/)[2].click