我正在测试股票网站
我在每个股票的页面都有一个'时钟',显示该股票目前是否开市/交易
closed : class="inlineblock redClockBigIcon middle isOpenExchBig-1"
opened : class="inlineblock greenClockBigIcon middle isOpenExchBig-1014"
唯一属性是“类”。我想使用'if'语句以便我可以区分它们,我尝试在“关闭”状态下运行它(请参阅下面的代码'检查',从底部开始12行)
它在循环的第三次抛出异常:
org.openqa.selenium.NoSuchElementException:没有这样的元素
为什么呢?请问我该如何解决?
public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.chrome.driver", "C:\\automation\\drivers\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("https://www.investing.com");
driver.navigate().refresh();
driver.findElement(By.cssSelector("[href = '/markets/']")).click();;
// list |
int size = 1;
for (int i = 0 ; i < size ; ++i) {
List <WebElement> list2 = driver.findElements(By.cssSelector("[nowrap='nowrap']>a"));
//Enter the stock page
size = list2.size();
Thread.sleep(3000);
list2.get(i).click();
**//Check**
WebElement Status = null;
if (Status == driver.findElement(By.cssSelector("[class='inlineblock redClockBigIcon middle isOpenExchBig-1']")))
{
System.out.println("Closed");
}
// Print instrument name
WebElement instrumentName = driver.findElement(By.cssSelector("[class='float_lang_base_1 relativeAttr']"));
System.out.println(instrumentName.getText());
Thread.sleep(5000);
driver.navigate().back();
}
}
}
答案 0 :(得分:0)
尝试使用
WebElement Status = null;
if (Status == driver.findElement(By.className("redClockBigIcon")))
{
System.out.println("Closed");
}
答案 1 :(得分:0)
你的循环没有运行3次,但这不是问题所在。
您正在使用findElement
返回WebElement,如果找不到该元素则会引发错误。如果您在某个页面上并且您不知道该股票是否已开启,您有两种选择:
NoSuchElementExceptions
。如果抛出此错误,则找不到关闭的类,因此页面已打开。findElements
代替findElement
。这将返回一个元素列表,如果Selenium找不到任何元素,则不会抛出任何异常。获取列表后,只需检查列表中的元素数量。选项1:
boolean isClosed = false;
try {
isClosed = driver.findElement(By.cssSelector("[class='redClockBigIcon']")).isDisplayed();
}
catch (NoSuchElementException) {
isClosed = false;
}
选项2:
List<WebElement> closedClockElements = driver.findElements(By.cssSelector("[class='redClockBigIcon']"));
if (closedClockElements.size() > 1) {
System.out.println("Closed");
}
else {
System.out.println("Open");
}