PhantomJS找不到隐藏的元素:display:none'

时间:2018-04-06 18:25:13

标签: javascript java selenium-webdriver phantomjs headless-browser

我无法在Eclipse上使用phantomJS和Selenium Web-Driver自动执行某些功能测试,也许你们可以帮助我。

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

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

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

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

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

我已尝试将显示设置为'阻止'在div上显示这些元素,使用以下代码,但仍然无效:

((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 个答案:

没有答案