0

我正在尝试在 Mac 上给 Selenium Webdriver 发短信。我试图让它自动填充谷歌和搜索的搜索空白。搜索框的html如下:

<input class="gLFyf" maxlength="2048" name="q" type="text" jsaction="paste:puy29d" aria-autocomplete="both" aria-haspopup="false" autocapitalize="off" autocomplete="off" autocorrect="off" role="combobox" spellcheck="false" title="Search" value="" aria-label="Search">

所以,我想测试我是否可以挑出上面的元素,它对应于搜索框。所以我让它打印以下内容,看看它是否确实得到了元素:

driver.findElements(By.className("gLFyf")).toString

但是,它没有打印上面的实际 html,而是打印

[[[ChromeDriver: chrome on MAC (a8470f41df7943e813ac6f77266ed33c)] -> class name: gLFyf]]

谁能向我解释为什么我没有得到元素?

4

2 回答 2

1

根据您打印Google Home Page Search Box元素的html的问题,您可以使用以下解决方案:

  • 代码块:

    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.firefox.FirefoxDriver;
    
    public class findElement_html {
    
        public static void main(String[] args) {
    
            System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
            WebDriver driver = new FirefoxDriver();
            driver.get("https://www.google.com/");
            WebElement myElement = driver.findElement(By.name("q"));
            System.out.println(myElement.getAttribute("outerHTML"));
        }
    }
    
  • 控制台输出:

    <input class="gsfi lst-d-f" id="lst-ib" maxlength="2048" name="q" autocomplete="off" title="Search" value="" aria-label="Search" aria-haspopup="false" role="combobox" aria-autocomplete="list" style="border: medium none; padding: 0px; margin: 0px; height: auto; width: 100%; background: transparent url(&quot;data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw%3D%3D&quot;) repeat scroll 0% 0%; position: absolute; z-index: 6; left: 0px; outline: currentcolor none medium;" dir="ltr" spellcheck="false" type="text">
    
于 2018-09-11T08:06:52.797 回答
0

我不明白你想做什么?你想检查你是否找到了你需要的元素?

所以..

Webelement element = driver.findElement...

如果未找到元素,将抛出异常。

您可以尝试检查定位器找到的元素计数:

driver.findElements(By.className("gLFyf")).count

如果没有找到,这将返回 0,您也可以将其与 1 进行比较,以确保没有任何其他具有相同类名的元素。

if(driver.findElements(By.className("gLFyf")).count > 1){
     //more than one lement found
}
于 2018-09-11T12:14:24.720 回答