如何使用WebElement的if语句

时间:2017-12-03 14:14:49

标签: if-statement selenium-webdriver qwebelement

我正在测试股票网站

我在每个股票的页面都有一个'时钟',显示该股票目前是否开市/交易

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

}

2 个答案:

答案 0 :(得分:0)

尝试使用

     WebElement Status = null;

     if (Status == driver.findElement(By.className("redClockBigIcon")))
     {
         System.out.println("Closed");
     }

答案 1 :(得分:0)

你的循环没有运行3次,但这不是问题所在。

您正在使用findElement返回WebElement,如果找不到该元素则会引发错误。如果您在某个页面上并且您不知道该股票是否已开启,您有两种选择:

  1. 抓住任何NoSuchElementExceptions。如果抛出此错误,则找不到关闭的类,因此页面已打开。
  2. 使用findElements代替findElement。这将返回一个元素列表,如果Selenium找不到任何元素,则不会抛出任何异常。获取列表后,只需检查列表中的元素数量。
  3. 选项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");
    }