为什么我不能在Selenium / HtmlUnit中的字段中输入文本?

时间:2014-09-14 21:56:22

标签: java selenium twitter webdriver htmlunit

好的,所以我一直致力于一个可以通过java中的html unit / selenium驱动程序访问twitter的程序。这是我正在尝试构建的更大程序的一部分。无论如何,我已经成功地使用我的帐户登录到twitter,甚至让它搜索其他帐户但是当我尝试发推文时,我收到如下错误消息:

"Exception in thread "main" java.lang.UnsupportedOperationException: You may only set the value of elements that are input elements
at org.openqa.selenium.htmlunit.HtmlUnitKeyboard.sendKeys(HtmlUnitKeyboard.java:82)
at org.openqa.selenium.htmlunit.HtmlUnitWebElement.sendKeys(HtmlUnitWebElement.java:343)
at javaapplication4.JavaApplication4.main(JavaApplication4.java:41)

Java结果:1“

我不确定问题是什么。这是我的代码:

WebDriver driver = new HtmlUnitDriver();

 driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

  driver.get("https://twitter.com/login");

   System.out.println(driver.getCurrentUrl());

   WebElement element = driver.findElement(By.name("session[username_or_email]"));


 element.sendKeys("A*****K*****");

 WebElement pass = driver.findElement(By.name("session[password]"));
pass.sendKeys("*******");
pass.sendKeys(Keys.ENTER);
 System.out.println(driver.getCurrentUrl());

     WebElement tweet = driver.findElement(By.id("tweet-box-mini-home-profile"));
       tweet.click();
       WebElement tweet2 = driver.findElement(By.id("tweet-box-global-label"));
       tweet2.sendKeys("A");
        WebElement send = driver.findElement(By.className("btn primary-btn tweet-action tweet-btn js-tweet-btn"));
        send.click();
        driver.close();

1 个答案:

答案 0 :(得分:1)

似乎有两个不同的元素,名称= session [username_or_email]。默认情况下,Selenium会收到它从标记中找到的第一个。那个是隐藏的,所以如果你收到错误会更有意义"元素不可见,因此无法与#34;进行交互。无论如何,在定义定位器时尝试更具说明性,即:

WebElement element = driver.findElement(By.xpath("//form[@class=\"t1-form clearfix signin js-signin\"]//input[@name=\"session[username_or_email]\"]"));

编辑: 对不起,我没有读好这个问题。无论如何,你为什么要把你的文字发送到:

WebElement tweet2 = driver.findElement(By.id("tweet-box-global-label"));

似乎对应于:

<span id="tweet-box-global-label" class="visuallyhidden">Tweet text</span>

从我在Twitter上看到的,您应该将文本发送到第一个元素:

WebElement tweet = driver.findElement(By.id("tweet-box-mini-home-profile"));

无论如何,似乎Javascript正在onClick上执行某些操作,因此您可能需要在向其发送文本之前再次查找此元素,否则您可能会在那里看到StaleElementException