если еще??пытаться??Мне нужна помощь по методам - PullRequest
0 голосов
/ 23 февраля 2019

Если один метод работает, а другой нет, как заставить код попробовать альтернативный метод?

Вот код

1-й метод

driver.findElement(By.id("com.simplemobiletools.gallery:id/dir_thumbnail")).click();
driver.findElement(By.id("com.simplemobiletools.gallery:id/medium_thumbnail")).click();

2-й метод

driver.findElement(By.id("com.offerup:id/circle")).click(); 
driver.findElement(By.id("com.offerup:id/done")).click();

Если первый метод не работает, я хочу, чтобы он пошел дальше и попробовал второй метод, но я не знаюкакую команду использовать для этого.

Я не очень опытен в программировании, поэтому, пожалуйста, потерпите меня.

Ответы [ 3 ]

0 голосов
/ 23 февраля 2019

Я предполагаю, что под "не работает" вы подразумеваете, что элемент не был найден.Два варианта:

  1. Согласно документация , findElement поднимает NoSuchElementException, если элемент не найден.Таким образом, вы можете продолжать использовать findElement и перехватить исключение через try / catch.

  2. В качестве альтернативы используйте findElements, который возвращаетList, и ветвь, основанная на том, были ли найдены.Как LuisGP указал , часто полезно избегать исключений.

Вариант 1:

try {
    driver.findElement(By.id("com.simplemobiletools.gallery:id/dir_thumbnail")).click();
    driver.findElement(By.id("com.simplemobiletools.gallery:id/medium_thumbnail")).click();
} catch (NoSuchElementException e) {
    driver.findElement(By.id("com.offerup:id/circle")).click(); 
    driver.findElement(By.id("com.offerup:id/done")).click();
}

Или, если выпредназначен для обработки по одному:

try {
    driver.findElement(By.id("com.simplemobiletools.gallery:id/dir_thumbnail")).click();
} catch (NoSuchElementException e) {
    driver.findElement(By.id("com.offerup:id/circle")).click(); 
}
try {
    driver.findElement(By.id("com.simplemobiletools.gallery:id/medium_thumbnail")).click();
} catch (NoSuchElementException e) {
    driver.findElement(By.id("com.offerup:id/done")).click();
}

Вариант 2 (если вы хотите обрабатывать их один за другим, вы сможете настроить, если вы хотитетолько первый результат):

List<WebElement> elements;
elements = driver.findElements(By.id("com.simplemobiletools.gallery:id/dir_thumbnail"));
if (element.size() == 0) {
    driver.findElement(By.id("com.offerup:id/circle")).click(); 
} else {
    elements.get(0).click();
}
elements = driver.findElements(By.id("com.simplemobiletools.gallery:id/medium_thumbnail"));
if (elements.size() == 0) {
    driver.findElement(By.id("com.offerup:id/done")).click();
} else {
    elements.get(0).click();
}
0 голосов
/ 23 февраля 2019

Вы можете попробовать щелкнуть элемент из 4 заданных элементов, который является видимым и активным.Это позволит вам безопасно нажимать на элемент, вместо того чтобы щелкать мышью после перехвата исключения и хорошей практики.Он будет выдавать исключение только тогда, когда ни один элемент не будет найден из 4, и это допустимый регистр.

MobileElement A = driver.findElement(By.id("com.simplemobiletools.gallery:id/dir_thumbnail"));
MobileElement B = driver.findElement(By.id("com.simplemobiletools.gallery:id/medium_thumbnail"));
MobileElement C = driver.findElement(By.id("com.offerup:id/circle"));
MobileElement D = driver.findElement(By.id("com.offerup:id/done"));

public void clickOnElement() {
    try {
        if(A.isDisplayed() && A.isEnabled())
        {
            A.click();
        }
        if(B.isDisplayed() && B.isEnabled())
        {
            B.click();
        }
        if(C.isDisplayed() && C.isEnabled())
        {
            C.click();
        }
        if(D.isDisplayed() && D.isEnabled())
        {
            D.click();
        }

    }catch (Exception e) {
        e.printStackTrace();
    }

}

Просто вызовите метод clickOnElement в вашем тестовом примере.

0 голосов
/ 23 февраля 2019

Вы можете использовать try catch block для этой цели:

try {

  driver.findElement(By.id("com.simplemobiletools.gallery:id/dir_thumbnail")).click();             
  driver.findElement(By.id("com.simplemobiletools.gallery:id/medium_thumbnail")).click();
catch (Exception e) {
  driver.findElement(By.id("com.offerup:id/circle")).click(); 
  driver.findElement(By.id("com.offerup:id/done")).click();
} 

вы также можете указать конкретное исключение, например, "ElementNotFoundException" или "ElementNotVisibleException" в типе параметра catch

...