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
我正在使用 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