Html Selenium:测试文本是否完全可见

Html Selenium:测试文本是否完全可见,html,css,selenium,selenium-webdriver,ui-testing,Html,Css,Selenium,Selenium Webdriver,Ui Testing,有没有办法用Selenium检查文本是否完全可见?假设我有文本 同侧阴唇 由于css不好,它只能读取 洛雷姆ips 在页面上,其余部分位于错误放置的div下。是否有方法断言全文可见?如果使用Java,下面是一种方法 首先,使用正确的定位器定位元素并执行getText(),然后将字符串与预期(全文)进行比较 可能是这样的: String actual = driver.findElement(By.cssSelector("")).getText().trim(); assertEquals(ac

有没有办法用Selenium检查文本是否完全可见?假设我有文本

同侧阴唇

由于css不好,它只能读取

洛雷姆ips


在页面上,其余部分位于错误放置的div下。是否有方法断言全文可见?

如果使用Java,下面是一种方法

首先,使用正确的定位器定位元素并执行
getText()
,然后将字符串与预期(全文)进行比较

可能是这样的:

String actual = driver.findElement(By.cssSelector("")).getText().trim();
assertEquals(actual, expected);

以下是检查元素中的文本是否可见的JAVA代码:

public boolean checkForText() {

    boolean isVisible = false;

    try {
        // Start by searching the element first.  You can search by many ways.  eg. css, id, className etc..
        WebElement element = webDriver.findElement(By.id("the elemnts' id"));
        System.out.println("Element found");
        // Check if the found element has the text you want.
        if(element.getText().equals("lorum ipsum dolor sit amet")) {
            System.out.println("Text inside element looks good");
            isVisible = true;
            //additionally, you can perform an action on the element
            //e.g. element.click();
        } else {
            System.out.println("Text does not match");
        }
    } catch (NoSuchElementException e) {
        // the method findElement throws an exception.
        System.out.println("Element not found");
    }

    return isVisible;

}    
仅当找到元素时,此方法才会返回true,并且其内部文本对应于equals标准,即作为参数-lorum ipsum dolor sit amet传递的文本


希望这有帮助;)

下面是一个使用我创建的JSFIDLE和Java/Selenium的简单示例

HTML

<p id="1">lorum ipsum dolor sit amet</p>
<p id="2">lorum ipsum <div style="display:none">dolor sit amet</div></p>
输出

actual1: lorum ipsum dolor sit amet
actual2: lorum ipsum
PASS: true
PASS: false

Selenium不会返回用户看不见的文本,因此您只需将返回的内容与预期字符串进行比较。如果它们不相等,那么文本可能是隐藏的。

有趣的问题。你能提供一个可复制的例子吗?当你说“完全可见”时,你的意思是“滚动到视图中”,即人类实际可见吗?我只是建议作为开始讨论的起点。如果你读了OP的问题,文本就在那里。问题是-他们试图验证元素的视觉效果。所有适当的文本都在那里,只是没有正确地显示。好吧,OP说“其余的在一个错误放置的div下”。正如我所说,使用正确的定位器将获得正确
标记下的文本,而不是错误放置的
标记下的文本@sircapsalot你介意再读一遍他的问题吗?谢谢。OP理解某些CSS规则只能使完整字符串部分可见(对人而言),基本Selenium规则无法涵盖这一点,因此@sircapsalot建议,您仍然没有抓住要点。@AndrewRegan webdriver不会返回用户看不见的文本。如果真正的用户只看到部分文本,webdriver将只返回该部分文本。@AndrewRegan和sircapsalot你们都没有抓住要点。Selenium不会看到用户看不到的文本(一般情况下)。将Selenium返回的内容与预期文本进行比较是实现这一点的方法。如果你不相信,请运行我的答案中的代码,自己看一看。这甚至远远没有涵盖OP对“可见性”的要求的本质。@Andrewergan你能举个例子吗?我会路过(元素定位器)和所需的字符串到函数中。@JeffC我正在传递已定位的元素和字符串:`if(element.getText().equals(“lorum ipsum dolor sit amet”){`您没有传递它们……您已经对它们进行了硬编码。
String expectedString = "lorum ipsum dolor sit amet";
WebDriver driver = new FirefoxDriver();
driver.get("https://jsfiddle.net/JeffC/t7scm8tg/1/");
driver.switchTo().frame("result");
String actual1 = driver.findElement(By.id("1")).getText().trim();
String actual2 = driver.findElement(By.id("2")).getText().trim();
System.out.println("actual1: " + actual1);
System.out.println("actual2: " + actual2);
System.out.println("PASS: " + expectedString.equals(actual1));
System.out.println("PASS: " + expectedString.equals(actual2));
actual1: lorum ipsum dolor sit amet
actual2: lorum ipsum
PASS: true
PASS: false