我遇到了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);
}
结果:工作但速度太慢
答案 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
感谢您的善意建议