无法使用Selenium Webdriver在Twitter上的“撰写新推文”框中输入文本

时间:2019-05-28 16:57:42

标签: java selenium-webdriver twitter

我正在尝试使用Chrome中的Selenium Webdriver自动进行Tweeting。我可以登录并单击“ Tweet”按钮,打开“撰写新Tweet”框,但是当我尝试使用element.sendKeys(tweetMessage);输入文本时,我得到了

  

org.openqa.selenium.ElementNotInteractableException:元素不   互动

使用: selenium-java-3.141.59 铬= 74.0.3729.169 (驱动程序信息:chromedriver = 74.0.3729.6)

以下是相关代码:

    String composeTweetXpath = "//div[@aria-labelledby='Tweetstorm-tweet-box-0-label Tweetstorm-tweet-box-0-text-label']//div";
    String tweetMessage = "This is my test Tweet";

    WebDriver driver;
    driver = new ChromeDriver();
.
.
.
.

try {
    element = wait.until(ExpectedConditions.elementToBeClickable(By.xpath(composeTweetXpath)));
    System.out.println("After wait until...");
    element = driver.findElement(By.xpath(composeTweetXpath));
    System.out.println("After driver.findElement...");
    element.click();
    System.out.println("After element.click...");
    element.sendKeys(tweetMessage);
    System.out.println("Found Tweet box and typed message");
} catch ( Exception e1) {
    System.out.println("Failed to find Tweet box");
    e1.printStackTrace();
}

我很惊讶我没有在element.click();上看到错误,而是在element.sendKeys(tweetMessage);上得到了错误。我从这段代码中得到的输出是:

等到...之后

在driver.findElement之后...

在element.click之后...

已移至元素...

找不到“鸣叫”框

org.openqa.selenium.ElementNotInteractableException:元素不可交互

我也尝试使用:

    String js = "arguments[1].value = arguments[0]; ";   
    System.out.println("Executing : " + js);
    javascript.executeScript(js, tweetMessage, element);

...而不是element.sendKeys(tweetMessage);不会落入} catch(异常e1){块,但仍不会在“撰写新推文”框中输入文本。

奇怪的是,如果我使用driver = new FirefoxDriver();,则会在此行收到TimeoutException错误:

    element = wait.until(ExpectedConditions.elementToBeClickable(By.xpath(composeTweetXpath)));
  

org.openqa.selenium.TimeoutException:预期条件失败:   等待元素可点击:By.xpath:   // div [@ aria-labelledby ='Tweetstorm-tweet-box-0-label   Tweetstorm-tweet-box-0-text-label'] // div(尝试10秒   500毫秒间隔)


1 个答案:

答案 0 :(得分:1)

使用CSS选择器

ChromeDriver newDriver =新的ChromeDriver();         WebDriverWait等待=新的WebDriverWait(newDriver,50);

    newDriver.get("https://twitter.com/");
    newDriver.findElement(By.name("session[username_or_email]")).sendKeys("arungnairktm@gmail.com");
    newDriver.findElement(By.name("session[password]")).sendKeys("Cisco_12345678");
    newDriver.findElement(By.className("submit")).click();
    WebElement composes = waits
            .until(ExpectedConditions.visibilityOfElementLocated(By.id("global-new-tweet-button")));
    composes.click();
    WebElement tweets = waits.until(ExpectedConditions.visibilityOf(newDriver.findElement(By.cssSelector(
            "#Tweetstorm-tweet-box-0 > div.tweet-box-content > div.tweet-content > div.RichEditor.RichEditor--emojiPicker.is-fakeFocus > div.RichEditor-container.u-borderRadiusInherit > div.RichEditor-scrollContainer.u-borderRadiusInherit > div.tweet-box.rich-editor.is-showPlaceholder"))));

    tweets.click();
    tweets.sendKeys("heys");