PhantomJS don 't find elements hidden by ' display:none'

我在Eclipse上使用phantomJS和Selenium Web-Driver自动执行某些功能测试时遇到了麻烦,也许你们可以帮助我 .

我有一个产品卡,显示当您在其上执行悬停时由JavaScript隐藏的三个元素,有两个选择和一个按钮 .

它没有找到选择,我通过在div类上添加'hover'使动画显示元素来解决这个问题:

((JavascriptExecutor)driver).executeScript("document.getElementById('card--').className+=(' hover');");

这样我就可以在选择上设置模型和数量 .

但是当我尝试在按钮上发送单击操作时,Selenium返回该元素不可见且可能无法操作 .

我已经尝试将显示设置为div上的'block',显示这些元素,使用以下代码,但仍然无法正常工作:

((JavascriptExecutor)driver).executeScript("document.getElementsByClassName('o-card__add')[0].style['display']='block';");

我已经尝试过使用JavascriptExecutor使用 arguments[0].click 对其执行强制点击但仍然无法正常工作 .

我开始感到绝望了 . 这是完整的方法代码:

public SearchResultsPage selectProdModel() {
        wait = new WebDriverWait(driver, GlobalVariables.timeout);
        wait.until(ExpectedConditions.numberOfElementsToBeMoreThan(productCard, 0));
        //Forces the hover on the card
        ((JavascriptExecutor)driver).executeScript("document.getElementById('card--').className+=(' hover');");
        WebElement prodCard = driver.findElement(productCard);
        //Verify if it has the model selector
        if(prodCard.findElement(productModel).isDisplayed()) {
            select = new Select(prodCard.findElement(productModel));
            List<WebElement> models = select.getOptions();
            for(int x = 1; x < models.size(); x++) {
                if(!models.get(x).getText().contains("Esgotado")) {
                    select.selectByValue(models.get(x).getAttribute("value"));
                    break;
                }
            }
        }
        //From here starts the problem
        ((JavascriptExecutor)driver).executeScript("document.getElementsByClassName('o-card__add')[0].style['display']='block';");
        WebElement cardAdd = prodCard.findElement(By.cssSelector(".o-card__add"));
        cardAdd.findElement(btnAddCart).click();
        return this;
    }

回答(0)