浏览器不支持,在文本区域插入一个非常拉长的字符串:selenium:java

时间:2015-10-08 10:41:48

标签: java string selenium selenium-webdriver webdriver

我遇到了selenium的问题,我使用firefox浏览器在文本区域插入一个大字符串(String.length = 124354)。

1。我在文本区域传递字符串

driver.findElement(By.name("name")).sendKeys("my large String");

结果:无响应的脚本,浏览器挂起

2。第二次拆分字符串,根据fibonacci系列串联字符串并添加到列表中

结果:无响应的脚本,浏览器挂起

3. 拆分字符串,在5或10的buch中连接字符串并传递列表

try {
        int h = 0;
        for (i = 0; i < 200; i++)
        {
            d = "";
            n3 = n1 + n2;
            n1 = n2;
            n2 = n3;
            for (int t = 1; t < 6; t++) {
                m++;
                System.out.println(m);
                d = d.concat(gg[m]);
                h++;
            }
            f.add(d);
        }

    } catch (Exception e) {
    e.printStackTrace();
    }
    for (String h : qaw) {
              System.out.println(h);
            driver.findElement(By.name("name")).sendKeys(h);
        }

结果:工作但需要时间。

4. 拆分字符串并逐一传递

String qq ="my large String";
 String ab[]=qq.split(" ");
  for (String h : ab) {
            System.out.println(h);
            driver.findElement(By.name("name")).sendKeys(h);
        }

结果:工作但速度太慢

3 个答案:

答案 0 :(得分:0)

您可以尝试使用以下代码:

WebElement el = driver.findElement(By.name("name"));
String qq ="my large String";
String ab[]=qq.split(" ");
  for (String h : ab) {
        System.out.println(h);
        el.sendKeys(h);
  }

答案 1 :(得分:0)

可能导致速度减慢的一件事是,每次.sendKeys()时都要重新获取元素。你应该能够在循环之前获取元素,然后只重复.sendKeys()

我会把字符串拆分成更小的块。我认为.split(" ")朝着正确的方向前进,但根据你的文字,你可能会将字符串分成很多小块。我会使用更像下面的代码。它将字符串分成5000个字符的块。你应该上下调整它,看它是否能让脚本变得更快。

WebElement name = driver.findElement(By.name("name")); // do this so you don't refetch the element off the page each time you .sendKeys()
String qq = "my large String";
String[] tokens = qq.split("(?<=\\G.{5000})"); // experiment with different sized numbers here to find the sweet spot
for (String t : tokens)
{
    // System.out.println(t); // don't do this unless you are debugging because this will slow execution
    name.sendKeys(t); // send to the already fetched element
}

有关.split()的详情,请参阅this answer

答案 2 :(得分:0)

最后我得到了我的解决方案,我正在和你分享

WebElement element = driver.findElement(By.name("infringing-urls0"));
        ((JavascriptExecutor) driver).executeScript("arguments[0].value = arguments[1];", element, gd.getInflink());
// gd.getInflink() is the string value , that contain a large string 

感谢您的善意建议