我的测试中有一步进入几个html页面并在屏幕上查找元素。该元素可以有2个不同的CSS类名,而在网站上看起来相同(从视觉上讲),我必须使用带有逻辑'或'的if语句来识别它们
if (Status == driver.findElement(By.cssSelector(".inlineblock.redClockBigIcon.middle.isOpenExchBig-2")) || Status == driver.findElement(By.cssSelector(".inlineblock.redClockBigIcon.middle.isOpenExchBig-1")));
System.out.println("Stock is closed");)
我预计如果出现2个元素中的一个,那么Eclipse将
认识到它。好吧 - 出现了2中的第二个元素 - 由于某种原因,我有一个异常错误。 if语句只关注if中的第一个条件,而忽略了第二个条件。org.openqa.selenium.NoSuchElementException:没有这样的元素:
locate element:{“method”:“css 选择器“,”选择器“:” .inlineblock.redClockBigIcon.middle.isOpenExchBig-2 “}无法
如何制作||在这个'if'声明中工作? 感谢
答案 0 :(得分:1)
在您的上述逻辑中,您Status
已经存在WebElement
,而您正在与您正在查找的另一个Webelement
进行比较。我不认为这是你的意图,所以我会在解决方案中做出一些假设。
首先:查找所需选择器可能存在的所有元素(注意我使用findElements
代替findElement
)
List<WebElement> clockIconThingies = driver.findElements(By.cssSelector(".inlineblock.redClockBigIcon.middle.isOpenExchBig-2, .inlineblock.redClockBigIcon.middle.isOpenExchBig-1"));
第二:检查是否发现了什么
if(clockIconThingies.size() > 0)
{
System.out.println("Stock is closed");
}
或者对于您的css选择器,从图像看起来您可能根本不需要执行或,只需查找类redClockBigIcon
这样的类:
List<WebElement> clockIconThingies = driver.findElements(By.cssSelector(".redClockBigIcon"));
答案 1 :(得分:0)
您可以尝试使用try catch
阻止:
boolean isFirstElemPresent = true;
try{
driver.findElement(By.cssSelector(".inlineblock.redClockBigIcon.middle.isOpenExchBig-1"));
}catch (NoSuchElementException e){
isFirstElemPresent = false;
}
if(isFirstElemPresent == false)
driver.findElement(By.cssSelector(".inlineblock.redClockBigIcon.middle.isOpenExchBig-2"));
或
为避免try catch
阻止,请使用以下代码快照:
List<WebElement> elements = driver.findElements(By.className("redClockBigIcon"));
if (elements.size() == 0) {
System.out.println("Element is not present");
} else {
System.out.println("Element is present");
}