Исключение в потоке «main» org.openqa.selenium.Исключение NoSuchElementException: элемент не может быть найден на странице с использованием заданных параметров поиска

#java #appium

#java #appium

Вопрос:

Я получаю ошибку при использовании следующего кода:

 driver.findElementByClassName("//android.widget.EditText").sendKeys("hello");
  

Вот весь код:

 package aaaaa;

import java.net.MalformedURLException;
import java.util.concurrent.TimeUnit;

import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;

public class basics extends base {

    public static void main(String[] args) throws MalformedURLException, InterruptedException {

        AndroidDriver<AndroidElement> driver = Capabilities();

        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.findElementByXPath("//android.widget.TextView[@text='Preference']").click();
        Thread.sleep(2000);
        driver.findElementByXPath("//android.widget.TextView[@text='3. Preference dependencies']").click();
        Thread.sleep(3000);
        driver.findElementByXPath("//android.widget.CheckBox").click();
        Thread.sleep(3000);
        driver.findElementByXPath("//android.widget.TextView[@text='WiFi settings']").click();
        Thread.sleep(3000);
        driver.findElementByClassName("//android.widget.EditText").click();
        Thread.sleep(30000);
        driver.findElementById("//android:id/edit").sendKeys("hi");
        driver.findElementByClassName("//android.widget.EditText").sendKeys("hello");
    }
}
  

Я ожидаю, что текст будет введен в EditText .

Комментарии:

1. Пожалуйста, добавьте html элемента, для которого возникает исключение

2. ПРИВЕТ, Самир, я новичок в stackover flow. я не знаю, как отправлять вопросы и следовать инструкциям.

3. я делюсь скриншотами для Uiautomator следующим образом: drive.google.com/open?id=1yYyOklO2hF75KIdg66W8gQbuJOi2OWH1

4. Никаких проблем, пожалуйста, но html элемента в самом вопросе

Ответ №1:

Причина, по которой элемент не найден, заключается в том, что вы использовали // его в className hj точно так же, как вы используете его в xpath.
Однако при поиске любого элемента использование тегов типа className или id , // не требуется.

Вы можете найти элемент, используя className подобный:

 driver.findElementByClassName("android.widget.EditText").click();
  

И поскольку идентификатор также присутствует для элемента, вы можете найти элемент также с помощью id, например:

  driver.findElementById("android:id/edit").sendKeys("hello");
  

Комментарии:

1. Хотя это, вероятно, работает, я думаю, разумно добавить для исходного сообщения, что причина, по которой исходный код не будет работать, заключается в том, что он пытался выполнить поиск по classname, но переданный параметр начинался с двойной косой черты — как xpath.

2. @BillHileman да, верно, я обновляю свой ответ в соответствии с вашим предложением