如果别的??尝试??我需要方法方面的帮助

时间:2019-02-23 08:59:37

标签: java selenium automation appium

如果一个方法可行,而其他方法不可行,那么如何使代码尝试另一种方法呢?

这是代码

第一种方法

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

第二种方法

In [41]: arr = np.array([[0.0543275 , 0.51249827, 0.43317423], [0.07144389, 0.51
    ...: 152126, 0.41703486], [0.0776112 , 0.48593384, 0.43645496]])            
In [42]: arr                                                                    
Out[42]: 
array([[0.0543275 , 0.51249827, 0.43317423],
       [0.07144389, 0.51152126, 0.41703486],
       [0.0776112 , 0.48593384, 0.43645496]])

如果第一种方法不起作用,我希望它继续尝试第二种方法,但是,我不知道该使用什么命令。

我在编程方面不是很有经验,所以请忍受。

3 个答案:

答案 0 :(得分:3)

您可以为此使用try catch块:

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();
} 

您也可以指定特定的异常,例如catch参数类型中的“ ElementNotFoundException”或“ ElementNotVisibleException”

答案 1 :(得分:2)

我认为“不起作用”表示您未找到该元素。两种选择:

  1. 根据the documentation,如果找不到元素,findElement会引发NoSuchElementException。因此,您可以继续使用findElement并通过try / catch捕获异常。

  2. 或者,使用findElements,它返回List,并根据是否找到分支进行分支。与LuisGP pointed out一样,避免异常通常会有所帮助。

选项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();
}

答案 2 :(得分:0)

您可以尝试在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”方法即可。