检查文本在HTML元素的页面上是否可见

时间:2015-11-26 00:34:28

标签: selenium

我想使用Selenium(Python,如果重要的话)检查HTML页面上的某些文本(例如"独角兽")是否可见

但是,由于无关的原因,该页面具有以下结构(简化):

<div>
  <span style="display: none">A</span> <span style="display: none">unicorn</span>
</div>

Lettuce WebdriverAloe Webdriver中使用的检查是:

driver.find_elements_by_xpath(
    '//*[contains(normalize-space(.),"{content}")'.format(text))

然后检查is_displayed的返回元素。但是,这将找到外部div元素,并且其文本将包含搜索的字符串,即使该字符串实际上对用户不可见。

如何查看页面上的某些文字可见,即使它跨越多个元素?

各自的错误:Aloe Webdriver bugLettuce Webdriver bug

1 个答案:

答案 0 :(得分:0)

这是一个困难的场景。对于您给出的具体示例,以下代码应该有效。代码基本上将“A独角兽”分成2个单词并找到各个元素。找到各个span标签后,找到每个元素的父元素并进行相等性比较。如果父级是相等的,则每个单独的元素都用于显示属性。

public class ComplicatedSearch {

    public static void main(String[] args) {
        WebDriver driver = new FirefoxDriver();
        driver.get("url");

        // Look if "A unicorn" occurs within a single element
        WebElement element = getElement(driver, "A unicorn");
        if (element != null) {
            if (element.isDisplayed()) {
                System.out.println("Text is displayed");
            }
        }

        // Split "A unicorn" into 2 String and find the individual elements
        WebElement part1 = getElement(driver, "A");
        WebElement part2 = getElement(driver, "unicorn");

        if (part1 != null && part2 != null) {
            // find the parents of part1 and part2 and compare whether they are
            // equal
            if (findParent(driver, "A").equals(findParent(driver, "unicorn"))) {
                // if parents are equal, check if both elements are displayed
                if (part1.isDisplayed() && part2.isDisplayed()) {
                    System.out.println("Text is displayed");
                } else {
                    System.out.println("Text is not displyed");
                }
            }
        }
    }

    private static WebElement getElement(WebDriver driver, String keyword) {
        try {
            return driver.findElement(By.xpath("//*[.='" + keyword + "']"));
        } catch (NoSuchElementException e) {
            return null;
        }
    }

    private static WebElement findParent(WebDriver driver, String keyword) {
        try {
            return driver.findElement(By.xpath("//*[.='" + keyword + "']/.."));
        } catch (NoSuchElementException e) {
            return null;
        }
    }
}

为了使这个场景具有通用性,需要投入大量精力和许多条件。快乐的编码!!