我正在尝试使用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毫秒间隔)
答案 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");