[英]Unable to find the element in selenium which is having on-click attribute
我正在嘗試使用 Selenium 查找元素。 我嘗試使用x-path
和class name
,但兩種方法都無法點擊元素。
具體來說,我試圖找到新的帳戶鏈接元素,它基本上是一個onclick
屬性。
<a onclick="getDashboard().newAccount(event)" href="#" class="dashboard_menu_div_main">
下面是完整代碼。
<div class="dashboard" style="">
<div class="dashboard_context">
<div class="dashboard_context_title">Welcome Muamalaty Portal</div>In relation to the provision of Services and supply of Products by Etisalat Website Customer of Etisalat Website shall observe and be bound by Etisalat Conditions applicable to each.
</div>
<div class="dashboard_Body dashboard-content">
<div class="dashboard_menu_div dashboard-menu">
<ul>
<li>
<a onclick="getDashboard().newAccount(event)" href="#" class="dashboard_menu_div_main">
<div class="dashboard_menu_number">01</div>
<div class="dashboard_menu_img">
<img src="/cim/resources/images/produts/dashboard/new-account.png">
</div>
<div class="dashboard_menu_menu_fonts">New Account</div>
</a>
</li>
<li>
<a onclick="getDashboard().standAlone(event,'714857547');" href="#" class="dashboard_menu_div_main">
<div class="dashboard_menu_number">05</div>
<div class="dashboard_menu_img">
<img src="/cim/resources/images/produts/dashboard/standalone.png">
</div>
<div class="dashboard_menu_menu_fonts">Standalone Devices</div>
</a>
</li>
<li>
<a onclick="new PendingOrders().init({evt:event});" href="#" class="dashboard_menu_div_main">
<div class="dashboard_menu_number">08</div>
<div class="dashboard_menu_img">
<img src="/cim/resources/images/produts/dashboard/pending-orders.png">
</div>
<div class="dashboard_menu_menu_fonts">Pending Orders</div>
</a>
</li>
<li>
<a onclick="getDashboard().newPreOrder(event)" href="#" class="dashboard_menu_div_main">
<div class="dashboard_menu_number">16</div>
<div class="dashboard_menu_img">
<img src="/cim/resources/images/produts/dashboard/new-preorder.png">
</div>
<div class="dashboard_menu_menu_fonts">New PreOrder</div>
</a>
</li>
<li>
<a onclick="new Miscellaneous().init({evt:event});" href="#" class="dashboard_menu_div_main">
<div class="dashboard_menu_number">22</div>
<div class="dashboard_menu_img">
<img src="/cim/resources/images/produts/dashboard/miscellaneous.png">
</div>
<div class="dashboard_menu_menu_fonts">Miscellaneous services</div>
</a>
</li>
</ul>
</div>
</div>
</div>
</div>
我嘗試了下面的代碼,因為有 7 個 iframe 我試圖點擊所有框架中的位置,每次它在所有框架中都失敗了。
for(int i=0;i<=s1;i++) {
try {
driver.switchTo().frame(i);
driver.findElement(By.xpath("./div[@class=\"dashboard\"]/div[2]/div[@class=\"dashboard_menu_div dashboard-menu\"]/ul/li/a[@onclick=\"getDashboard().newAccount(event)\"]@onclick")).click();
}
catch(Exception e) {
System.out.println("failed "+i+" time");
}
}
我嘗試過的另一條路徑是:
//driver.findElement(By.xpath(".//input[contains(@onclick,'getDashboard().newAccount(event)')]")).click();
//driver.findElement(By.cssSelector("//dashboard_menu_div > ul:nth-child(1) > li:nth-child(1) > a:nth-child(1)")).click();
對於您嘗試過的xpath
以下,它應該//a
不是.//input
//driver.findElement(By.xpath(“ .// input [包含(@ onclick,'getDashboard()。newAccount(event)')]”)))。click();\n
如果在xpath
之上,更改后仍然不起作用,請添加一些調試代碼,以確保切換到正確的iframe
。 之后,您可以刪除調試代碼。 對於調試代碼,您可以找到容易位於同一iframe
的元素,例如標題:“ Welcome Muamalaty Portal”
try { driver.switchTo().frame(i); //debug code begin String title = driver.findElement(By.cssSelector("div.dashboard_context_title")) .getText(); System.out.println("Title: " + title); //debug code end // click New Accont Link driver.findElement(By.cssSelector("a[onclick*='newAccount']")).click(); } catch(Exception e) { System.out.println("failed "+i+" time"); }
根據您提供的HTML
,我們需要構造一個唯一的cssSelector
或xpath
來標識並單擊WebElement
,如下所示:
xpath
:
driver.findElement(By.xpath("//div[@class='dashboard_menu_div dashboard-menu']//following::a[1]")).click();
cssSelector
:
driver.findElement(By.cssSelector("div.dashboard_menu_div.dashboard-menu > a:nth-child(1)")).click();
切換到正確的iframe后,其工作正常。 感謝你們的支持。
driver.switchTo().frame(6);
driver.findElement(By.xpath(".//*[@id='mainForm:productsList']/div[2]/div[3]/div[2]/div/ul/li[1]/a")).click();
要么
driver.switchTo().frame(6); driver.findElement(By.cssSelector(".dashboard_menu_div_main")).click();
List<WebElement> elements = driver.findElementsByTagName("a");
for (WebElement el : elements) {
if (el.getAttribute("onclick").contains("newAccount(event)")){
el.click();
//or do what you need
}
只需嘗試遍歷所有元素並通過屬性值找到確切的元素即可。
您可以試用TestProject免費自動化平台。 有一個很好的工具可以巧妙地保存以后與之交互所需的所有元素
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.