我创建了一个测试脚本,我想在其中单击编辑按钮然后关闭窗口。大多数情况下代码按预期工作,但是相同代码的一些时间我得到了nosuchelement异常。我经历了论坛中提出的类似问题,但没有一个解决方案适合我。下面我将java代码与HTML代码一起放在希望找到解决方案。
for(String newwindow : window.getWindowHandles()){
//swithching to the new pop up using window.switchTo().window(passing newwindow as argument)
window.switchTo().window(newwindow);}
//getting title of new window using getTitle() method
System.out.println("NewWindow Title"+ window.getTitle());
window.findElement(By.xpath(".//*[@id='edit_resume_section3_open' and not(@disabled)]")).click();
window.manage().timeouts().implicitlyWait(40, TimeUnit.SECONDS);
System.out.println(window.findElement(By.xpath("//input[@name='title']")).getAttribute("value"));
window.manage().timeouts().implicitlyWait(40, TimeUnit.SECONDS);
window.findElement(By.id("update")).click();
window.manage().timeouts().implicitlyWait(40, TimeUnit.SECONDS);
window.close();
Html Code for the webelement-
<head>
<body class="bg_lightgreen" marginwidth="0" marginheight="0" onload="" leftmargin="0" topmargin="0" style="">
<iframe id="_yuiResizeMonitor" style="position: absolute; visibility: visible; width: 10em; height: 10em; top: -120px; left: -120px; border-width: 0px;"/>
<div id="fade_nation_mismatch" class="black_overlay"/>
<div id="fade_visual_resume" class="black_overlay"/>
<div id="show_visual_resume" class="white_content" style="position: absolute; top: 25%;">
<table class="bg_purple" width="100%" cellspacing="0" cellpadding="0" border="0">
<table class="bg_white" width="998" cellspacing="0" cellpadding="20" border="0" align="center">
<table class="bg_white" width="998" cellspacing="0" cellpadding="20" border="0" align="center">
<tbody>
<tr>
<td class="font_15 txt_purple bold" width="203" style="padding-bottom:5px; width:250px; word-wrap: break-word;">1.6YR Experiance/BSC(CS)</td>
<td width="715" style="padding-bottom:5px;">
<a id="edit_resume_section3_open" class="thickbox" title="Professional Details" style="cursor:pointer" onclick="showEditSection(3);">[Edit]</a>
</td>
</tr>
答案 0 :(得分:1)
首先确保您的xpath表达式(或用于查找元素的任何内容)在任何情况下都是正确的。对于动态生成的元素,您的xpath表达式在任何情况下都无效。
如果它是正确的,这意味着你得到了比赛条件。您正在寻找的元素有时不会 。这可能取决于您的浏览器可能需要更多时间来呈现页面,或者可能需要更多时间来为您的页面提供服务的http服务器。可能有很多(愚蠢的)原因。
为了修复它,你必须使用池。检查元素是否存在。如果有,请继续。如果不存在,请等待再试一次。班级&#39; com.thoughtworks.selenium.Wait&#39;符合这个目的。
您将找到使用&#39; com.thoughtworks.selenium.Wait示例&#39;的示例。作为谷歌中的关键字。
答案 1 :(得分:0)
我建议在尝试点击之前检查元素是否存在于循环中
答案 2 :(得分:0)
我建议您使用ID来查找元素。由于它有ID,您可以使用它。如果你有其他选择,使用xpath进行自动化并不是那么好。 xpath可能会改变。 我认为以下行用于打开链接,
window.findElement(By.id("edit_resume_section3_open")).click();
此外,不需要在每行之前使用隐式等待。声明后,测试中的所有行都会受到影响。 如果你想使用等待每一行,那么尝试显式等待。