如果我在Chrome中使用开发人员工具,并粘贴By.name语句,则该页面会突出显示我要查看的内容。
以下是两个彼此相邻的Java语句:
driver.findElement(By.xpath("//input[@name='firstName']")).clear();
driver.findElement(By.xpath("//input[@name='shippingCost']")).click();
我将这两个命令并排放置,以排除驱动程序在它们来自的代码点被某种方式破坏了。第一条语句确实清除了引用的文本框,但第二条语句返回NoSuchElementError。我还尝试过使用如上所述的By.name,我只是在追查为什么第二个每次都会引发错误。
我正在使用的页面是EXTJS单页面网站,因此控件始终存在。我想使用.getText()。length()来验证此框中现在是否有文本。
在为什么我无法使用xpath或名称选择器在页面上查看该控件的页面上为何无法单击甚至引用该控件的任何帮助。
---编辑以将这些代码相关事件的图片添加到上述xpaths中
Sorry, this is another place that doesnt work, [name='shippingTypeGroundDate']
答案 0 :(得分:0)
检查所选选择器中是否有重复的元素。根据您的描述,名称字段按预期工作,并且您面临运费问题。使用所选选择器的同一页面上可能有重复的元素处于非活动状态。
您可以使用下面的java code
获取存在的元素数量:
List<WebElement> listOfElements =driver.findElements(By.xpath("//input[@name='shippingCost']"));
System.out.println("Number of elements:" +listOfElements.size());
如果上述解决方案不起作用,请尝试使用javascriptexecutor,即使该元素在另一个元素下面,它也会执行这些操作。
答案 1 :(得分:0)
添加显式等待输入文本框被加载。然后尝试单击带有Javascript执行程序的文本框。有时,单击网络驱动程序可能不起作用。
WebElement element = driver.findElement(By.xpath("//input[@name='shippingCost']"));
try {
if (element.isEnabled() && element.isDisplayed()) {
((JavascriptExecutor) driver).executeScript("arguments[0].click();", element);
} else {
System.out.println("Unable to click on element");
}
} catch (StaleElementReferenceException e) {
System.out.println("Element is not attached to the page document "+ e.getStackTrace());
} catch (NoSuchElementException e) {
System.out.println("Element was not found in DOM "+ e.getStackTrace());
} catch (Exception e) {
System.out.println("Unable to click on element "+ e.getStackTrace());
}