有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在SeleniumWebDriver中搜索,试图验证结果;如果结果为true,则返回为false

我正在尝试编写一个SeleniumWebDriver测试,它可以导航到Google,搜索一些东西,然后验证Google是否搜索了输入的内容。然而,下面的代码给出了一个“false”输出,当我看到它是真的时

我在这个场景中找到的所有代码似乎都是Google Instant之前的代码,我无法在FirefoxDriver中关闭Instant。它还应该等待网页,图像,视频等酒吧被点击之前,检查任何东西;增加隐式wait值似乎对测试的结果或最终结果没有任何影响。在verifyTrue和assertTrue之间切换不会更改结果

如果答案显而易见,我很抱歉,但我对SeleniumWebDriver(和Java)相对较新

package mypackage;

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.util.concurrent.TimeUnit;

public class NavigateSearchVerify {

    public static void main(String[] args) {

        WebDriver driver = new FirefoxDriver();
        String baseUrl = "http://www.google.com";
        driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

        driver.get(baseUrl);

        WebElement query = driver.findElement(By.name("q"));
        query.sendKeys("Hello");
        query.sendKeys(Keys.ENTER);

        WebDriverWait wait = new WebDriverWait(driver, 15);
        wait.until(ExpectedConditions.elementToBeClickable(By.id("top_nav")));

        Boolean assertTrue = driver.findElements(By.className("gbqfif")).contains("Hello");
        if (assertTrue == true) {
            System.out.print("Yes");
        } else {
            System.out.print("No");
        }    
    }    
}

共 (2) 个答案

  1. # 1 楼答案

    通过调试,你知道这是真的吗

    布尔assertTrue启动时,替换这些行,然后尝试以下操作:

    if(waitForTextToLoad(By.className("gbqfif"),"Hello")){
       System.out.println("Yes");
    }else{
       System.out.println("Yes");
    }
    

    并将以下内容从您的主菜单中删除:

    public boolean waitForTextToLoad(By by, String text){
            boolean wbeWaitFor = (new WebDriverWait(driver,10))
                    .until(ExpectedConditions.textToBePresentInElementLocated(by, text));
            return wbeWaitFor;
        }
    
  2. # 2 楼答案

    检查您的问题和代码后,我了解到:

    1. 你想打开谷歌吗
    2. 在搜索框中键入“Hello”
    3. 按回车键
    4. 验证是否在搜索框中输入了“Hello”

    driver.findElements(By.className("gbqfif")).contains("Hello");不正确

    有4个以上的元素具有className("gbqfif")。因此,当您使用findElements()时,将返回一个WebElements列表。您正在检查此列表是否包含“Hello”字符串对象。但该列表包含WebElement对象

    请尝试以下代码: driver.findElement(By.name("q")).getAttribute("value").contains("Hello");

    如果这对你有帮助,请告诉我