[英]Java Selenium findelement is not acknowledging an element that is on the page
如果我在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中
檢查所選選擇器中是否存在任何重復元素。 根據您的描述,名稱字段按預期工作,您將面臨運費成本字段的問題。 使用所選選擇器的同一頁面上可能存在處於非活動狀態的重復元素。
你可以使用下面的java code
獲得元素的數量:
List<WebElement> listOfElements =driver.findElements(By.xpath("//input[@name='shippingCost']"));
System.out.println("Number of elements:" +listOfElements.size());
如果以上解決方案不起作用,請嘗試使用javascriptexecutor,即使此元素位於另一個元素下,它也會執行這些操作。
添加顯式等待要加載的輸入文本框。 然后嘗試使用Javascript執行程序單擊文本框。 有時webdriver單擊可能無法正常工作。
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());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.