如果一个方法可行,而其他方法不可行,那么如何使代码尝试另一种方法呢?
这是代码
第一种方法
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]])
如果第一种方法不起作用,我希望它继续尝试第二种方法,但是,我不知道该使用什么命令。
我在编程方面不是很有经验,所以请忍受。
答案 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)
我认为“不起作用”表示您未找到该元素。两种选择:
根据the documentation,如果找不到元素,findElement
会引发NoSuchElementException
。因此,您可以继续使用findElement
并通过try
/ catch
捕获异常。
或者,使用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”方法即可。