我只是刷新了我的WebDriver技能,并且正在尝试使用Java自动发送推文。我可以登录并点击“推文”。选择此项后,会弹出一个模态对话框。推文按钮被禁用,直到在框中键入至少1个字符,然后启用:
<button class="btn primary-btn tweet-action tweet-btn js-tweet-btn" type="button">
但我似乎无法用任何选择器选择它。我想我需要以某种方式将驱动程序控制切换到模态对话框,但不知道如何。它不在一个框架内。
有什么想法吗?
答案 0 :(得分:0)
功能模式对话框用于处理模态类型Windows。 当我们使用此函数打开一个窗口时,Java脚本执行会暂停,直到窗口关闭。 这里父窗口期望从弹出窗口返回一些值。 所以Selenium Web驱动程序中的问题是,当我们打开一个Modal窗口时,父窗口的可访问性就被阻止了。
带有模态对话框的Selenium中的问题: Selenium使用Java脚本。当调用show Modal对话框时,Javascript将从父级挂起。 其句柄仍然指向主窗口的Selenium被暂停。 因此,之后的所有连续命令都会被暂停。
如何处理Selenium Web驱动程序中的模态对话框。 先决条件:我相信当打开模态对话框时,光标位于模态对话框上。 在这种情况下,我们可以使用Robot类处理模态对话框上的操作。
执行打开模态对话框的操作后,请尝试以下方法
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_TAB);
robot.keyRelease(KeyEvent.VK_TAB);
StringSelection data_to_enter= new StringSelection("Data to Enter");
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(data_to_enter, null);
Thread.sleep(7000);
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
答案 1 :(得分:0)
在您选择了global-tweet-box
并发送了相应的密钥之后,请执行此操作,因为Twitter有一项功能,即按下CTRL + RETURN(或ENTER)将在模式框打开并填充后实际触发推文带文字:
String selectAll = Keys.chord(Keys.CONTROL, Keys.RETURN);
driver.findElement(By.id("tweet-box-global")).sendKeys(selectAll);
完整代码应如下所示:
driver.findElement(By.id("global-new-tweet-button")).click();
driver.findElement(By.id("tweet-box-global")).click();
String keys = "This is my first automated tweet.";
driver.findElement(By.id("tweet-box-global")).sendKeys(keys);
String selectAll = Keys.chord(Keys.CONTROL, Keys.RETURN);
driver.findElement(By.id("tweet-box-global")).sendKeys(selectAll);
答案 2 :(得分:-1)
尝试以下代码。有用。 (假设您已经编码了点击按钮的部分,该按钮打开了推文对话框)。 并且,对于记录,对话框仅在顶部窗口内。没有框架。
//For adding content in the message box, i.e, "Hello"
driver.findElement(By.id("tweet-box-global")).sendKeys("Hello");
//Clicking on the Tweet button
driver.findElement(By.xpath("//form[@class='t1-form tweet-form']//div[@class='tweet-button']/button")).click();
答案 3 :(得分:-1)
在文本字段中输入一些文本后,将启用Tweet按钮,您可以使用以下按钮点击它:
driver.findElement(By.cssSelector(".btn.primary-btn.tweet-action.tweet-btn.js-tweet-btn")).click();