如果一种方法有效而另一种方法无效,那么如何使代码尝试替代方法?
这是代码
第一种方法
driver.findElement(By.id("com.simplemobiletools.gallery:id/dir_thumbnail")).click();
driver.findElement(By.id("com.simplemobiletools.gallery:id/medium_thumbnail")).click();
第二种方法
driver.findElement(By.id("com.offerup:id/circle")).click();
driver.findElement(By.id("com.offerup:id/done")).click();
如果第一种方法不起作用,我希望它继续尝试第二种方法,但是,我不知道为此使用什么命令。
我在编程方面不是很有经验,所以请耐心等待。
您可以使用 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">
我认为"不起作用"是指找不到该元素。两个选项:
-
根据文档,如果未找到该元素,
findElement
会引发NoSuchElementException
。因此,您可以继续使用findElement
并通过try
/catch
捕获异常。 -
或者,使用
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();
}
您可以尝试单击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"方法即可。