我正在开发一个程序来自动化一些表格填充,我正在使用Selenium。自从开始以来一直困扰我的问题,如果这项工作,是一个应该单击按钮的指令不起作用并且不返回任何错误。这是随机发生的,但是在我第一次运行程序时,它经常发生。
基本上驱动程序必须进入一个站点,用登录填充一个弹出窗口,然后当第一页加载时,必须单击一个按钮,这将打开第二页。会发生的是,如果不打开第二页,驱动程序已经在寻找属于它的元素。
起初我认为浏览器和驱动程序可能不同步,驱动程序比浏览器更快,并且不知何故搞乱了整个过程。我尝试用半秒的睡眠来纠正这个问题。还实现了15秒的隐式等待。
没有任何改进,我决定检查是否找到了第一个元素。我已经插入一行来将按钮上的文本打印到控制台并正确打印。下一行是单击该按钮,虽然驱动程序没有检索到错误,但在浏览器上只加载了第一页。
最后但并非最不重要的是尝试使用该xpath查找所有元素,但列表只有一个元素。
因此,总而言之,找到第一个元素,点击指令不会检错,但仍然没有点击按钮。这是随机发生的。
以下是我正在使用的代码的相关部分:
tester.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
tester.get(website);
Thread.sleep(1000);
//Bypasses login pop-up window
try
{
bypassLogin(username, password);
}
catch(Exception e)
{
handler(e.getMessage(), null);
finisher(tester, br, br2, pathGecko, pathTemplate);
}
//Sleep in order to synchronize driver and browser
Thread.sleep(1000);
while((reader = br2.readLine()) != null)
{
tempOrig = new StringBuilder()
.append(tempOrig)
.append(reader)
.toString();
}
//Enters the body frame, with the elements to work with
try
{
tester.switchTo().frame("portal_header");
List <WebElement> LClick = tester.findElements(By.xpath(".//*[@id='2']/a"));
System.out.println(LClick.size()); //Returns 1
tester.findElement(By.xpath(".//*[@id='2']/a")).getText(); //Returns the correct value
tester.findElement(By.xpath(".//*[@id='2']/a")).click();
tester.switchTo().defaultContent();
tester.switchTo().frame("portal_body");
}
catch(Exception e)
{
handler(e.getMessage(), null);
finisher(tester, br, br2, pathGecko, pathTemplate);
}
答案 0 :(得分:0)
试试这个并检查
WebDriverWait wait = new WebDriverWait(tester, 15);
boolean bool = tester.findElement(By.xpath(".//*[@id='2']/a")).isDisplayed();
System.out.print(bool);
wait.until(ExpectedConditions.elementToBeClickable(By.xpath(".//*[@id='2']/a")));
tester.findElement(By.xpath(".//*[@id='2']/a")).click();
还要检查浏览器版本和selenium版本