我有以下问题,在执行登录后,系统加载主页面,就像5秒钟那样,所以在那之后,脚本应该键入3个字段并执行选项卡以获取更多信息,但是事情是,有时是工作,有时没有,在5个机会,只有一个工作,我不知道是否有关于获得所有字段或类似的东西的时间,使用IE 9导致该应用程序仅适用于IE < / p>
这是代码: `
System.setProperty("webdriver.ie.driver","C:\\Apps\\eclipse\\IEDriverServer.ex;
WebDriver driver = new InternetExplorerDriver();
driver.get("http://15.192.41.95/Cabina/asp/Login.asp");
WebElement text1 = driver.findElement(By.id("text1"));
text1.sendKeys("xxxx");
WebElement password1 = driver.findElement(By.id("password1"));
password1.sendKeys("xxxx");
WebElement aceptar = driver.findElement(By.id("ok1"));
aceptar.click();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.switchTo().frame(driver.findElement(By.name("menu")));
WebElement txtNumPolSol = driver.findElement (By.id("txtNumPolSol"));
txtNumPolSol.sendKeys("877885");
WebElement Text8 = driver.findElement(By.name("txtNumofic"));
Text8.sendKeys("228");
WebElement txtCveInc = driver.findElement(By.name("txtCveInc"));
txtCveInc.sendKeys("1");
WebElement clave = driver.findElement(By.id("txtCveInc"));
clave.sendKeys(Keys.TAB);
driver.switchTo().frame(driver.findElement(By.name("dest")));
WebElement txtNomrepo = driver.findElement(By.id("txtNomrepo"));
txtNomrepo.sendKeys("Jorge Villarreal");
driver.findElement(By.id("txtRelacion")).sendKeys("Conductor");
WebElement txtTelrepo = driver.findElement(By.id("txtTelrepo"));
txtTelrepo.sendKeys("83029090");`
这里有我遇到的不同问题:
1)无法找到名称为== txtOficina
的元素2)元素不再有效
3)无法找到id为== txtCveInc的元素(该字段在那里)
4)找不到名称== txtCveInc的元素(字段在那里)
系统解决问题的步骤是:
1)登录(到目前为止一直很好) 2)系统加载主页面(页面有框架并在5秒内获取所有字段......) 3)txtNumPolSol,txtNumofic和txtCveInc上的脚本类型(大多数问题都在最后两个字段中) 4)脚本执行选项卡 5)系统加载有关记录的一些信息,脚本继续... 注意:几乎所有问题都发生在第3步......
感谢您的反馈!
答案 0 :(得分:0)
这听起来像是时间问题。模拟用户的运行速度比页面准备好的速度快。根据页面加载的时间安排,会出现不同的问题。
解决方案是在触发DOM更改的步骤之后添加等待而不是影响下一步,但不会导致WebDriver在返回之前等待。 Google&#39; webdriver等待元素&#39;有很多方法可以做到。
答案 1 :(得分:0)
我也面临着类似的问题,但是我试图用Css_Selectors和X路径而不是id来查找元素,这对我很有用
答案 2 :(得分:-1)
这里的关键是在每个动作之后添加至少1秒的隐式等待,即发送密钥等。它将允许'driver.findElement'有足够的时间来找到该元素。虽然我建议将此代码保存在testBase或可重用的方法中。
driver.manage()。timeouts()。implicitlyWait(1,TimeUnit.SECONDS);
它有助于减少网络测试。