0

我希望能够在 c# 中使用 selenium 为 cleditor 文本字段设置正文,但这个过程似乎非常困难。谁能像我4岁一样解释它?

4

2 回答 2

1

Selenium 的基本逻辑是首先找到元素,然后对其执行操作。

但是,在这种情况下,您会遇到以下困难:

  1. 编辑在一个iframe
  2. iframe 没有 id、name 甚至没有意义的 src
  3. 编辑器不是输入或文本区域,而是它body本身。

如何导航到 iframe(Arran 的链接应该是一个很好的教程)

使用 Firefox+Firebug+Firepath 查找 iframe。

火狐+Firebug+Firepath 用法

如您所见,页面中有四个 iframe,您需要以下方法之一才能切换到编辑器框架,而不是其他框架。(来源

IWebDriver Frame(int frameIndex); // works but not desirable, as you have 4 frames, index might be changing
IWebDriver Frame(string frameName); // not working, your editor doesn't have frameName or id.
IWebDriver Frame(IWebElement frameElement); // the way to go, find frame by xpath or css selector in your case

所以我们有:

IWebElement iframe = driver.FindElement(By.XPath("//iframe[@src='javascript:true;']"));
driver.SwitchTo().Frame(iframe);

如何将密钥发送给编辑器

一旦您的驱动程序位于 iframe 中,通过 Firebug,您可以看到编辑器实际上body是.inputtextarea

所以你需要找到 body 元素,清除它并发送密钥。请注意,Clear()可能不适用于 body 元素,因此您需要先使用IJavaScriptExecutor或发送Control+a全选。

退出 iframe

在将一些文本发送到编辑器后,您可以使用driver.SwitchTo().DefaultContent();退出。

完成的代码

using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;

namespace SOTest {
    [TestClass]
    public class TestCLEditor {
        [TestMethod]
        public void TestMethod1() {
            IWebDriver driver = new FirefoxDriver();
            driver.Navigate().GoToUrl("http://premiumsoftware.net/CLEditor");

            // find frames by src like 'javascript:true;' is really not a good idea, but works in this case
            IWebElement iframe = driver.FindElement(By.XPath("//iframe[@src='javascript:true;']"));
            driver.SwitchTo().Frame(iframe);

            IWebElement body = driver.FindElement(By.TagName("body")); // then you find the body
            body.SendKeys(Keys.Control + "a"); // send 'ctrl+a' to select all
            body.SendKeys("Some text");

            // alternative way to send keys to body
            // IJavaScriptExecutor jsExecutor = driver as IJavaScriptExecutor;
            // jsExecutor.ExecuteScript("var body = document.getElementsByTagName('body')[0]; body.innerHTML = 'Some text';");

            driver.Quit();
        }
    }
}
于 2013-06-11T21:48:33.140 回答
0

在谷歌浏览器导航到页面右键单击文本字段的可编辑区域。单击检查元素。当 html 打开时,右键单击突出显示的元素,然后单击 Copy XPath。

在 Selenium Web 驱动程序中

IWebElement textField =      driver.FindElement(By.XPath("Paste what you got from CHROME"));
textField.SendKeys("Desired Text");
于 2013-06-11T16:33:02.703 回答